Mit den eigenen Bedingungen und eigenen Berechnungen im Versandkosten-Modul, können auch sehr komplexe Anforderungen und Berechnungen abgebildet werden. In diesem Artikel findest Du einige Beispiele aufgeführt. Beide Optionen findest Du in den Versandkosten im Reiter "Erweiterte Einstellungen".
Mit der eigenen Bedingung kann einen Versandart optional aktiviert oder deaktiviert werden. Die eigene Berechnung ignoriert die automatische Berechnung der Versandkosten. Zur Versandkosten-Ermittlung wird nur noch das Feld eigene Berechnung herangezogen.
Es können grundsätzlich alle Variablen der abgefragten Tabellen innerhalb der Funktionen sGetPremiumDispatches und sGetPremiumShippingcosts genutzt werden. Die jeweiligen Funktionen findest Du in der Datei /engine/Shopware/Core/sAdmin.php. Die Bereiche sind wie folgt unterteilt:
s_order_basket -> b
s_articles -> a
s_articles_details -> d
s_articles_attributes -> at
s_core_tax -> t
s_user -> u
s_order_billingaddress (Fallback: s_user_addresses) -> ob
s_order_shippingaddress (Fallback: s_user_addresses) -> os
Somit würde die Variable für die Spalte customergroup aus der Tabelle s_user folgendermaßen aussehen:
u.customergroup
1. MAX() -> Gibt den größten Wert für die Variable zurück, z.B. MAX(d.weight) gibt das höchste Gewicht aller im Warenkorb liegenden Artikel aus.
2. MIN() -> Gibt den kleinsten Wert für die Variable zurück, z.B. MIN(d.weight) gibt das geringste Gewicht aller im Warenkorb liegenden Artikel aus.
3. COUNT() -> Gibt die Anzahl einer Variable an, z.B. COUNT(d.ordernumber) gibt die Anzahl an verschiedenen Artikeln im Warenkorb an.
4. SUM() -> Summiert die Werte einer Variable, z.B. SUM(d.weight*b.quantity) gibt das Gesamtgewicht aller Artikel im Warenkorb an.
5. IFNULL(a,b) -> Ersetzt eine Variable durch einen anderen Wert falls diese NULL ist, z.B. IFNULL(us.zipcode,ub.zipcode) um zu prüfen, ob eine Lieferadressen-PLZ vorliegt und ansonsten die PLZ der Rechnungsadresse zu nutzen.
6. IF(Bedingung,Ja,Nein) -> Eine einfache Wenn-Dann-Sonst-Verzweigung, z.B. IF(d.weight>5,1,0) Wenn das Gewicht größer als 5 ist wird eine 1 zurückgegeben ansonsten eine 0.
7. CASE() -> Komplexe Verzweigung, z.B. CASE WHEN a.supplierid = 4 THEN 1 WHEN a.supplierid = 5 THEN 2 else 3 END Gibt für den Hersteller 4 1, für den Hersteller 5 2 und für alle anderen 3 zurück.
8. CURDATE() -> Gibt das aktuelle Datum aus, z.B. 2016-03-17
Für viele der eigenen Bedingungen und Berechnungen werden Artikel-Freitextfelder benötigt.
Ab Shopware 5.2 gibt es diese in einem eigenen Modul unter "Einstellungen > Freitext-Feld Verwaltung", die Zugehörige Doku ist hier zu finden: Freitextfeld-Verwaltung
Für die eigenene Bedingung muss oft unter Einstellungen > Grundeinstellungen > Storefront > Versandkosten-Modul die "Erweiterte SQL-Abfrage" erweitert werden. Im Standard sind dort Abfragen für Topseller, Kommentare und ESD-Artikel hinterlegt:
MAX(a.topseller) as has_topseller, MAX(at.attr3) as has_comment, MAX(b.esdarticle) as has_esd
Um die Bedingung dann in einer Versandart anzuwenden, füge innerhalb der Versandart die entsprechende Bezeichnung (z.B. has_topseller für die Topseller-Bedingung) im Tab Erweiterte Einstellungen in das Feld Eigene Bedingungen ein. Du hast auch die Möglichkeit, mehrere Bedingungen miteinander zu kombinieren.
Hierzu stehen UND (&& bzw. and) sowie ODER-Verknüpfungen (|| bzw. or) zur Verfügung.
Bitte beachte, dass sich die Abfrage verändern kann, je nachdem welche Shopware-Version eingesetzt wird. In den aktuellen 5.2 Versionen entspricht true ="1" und false ="0", in älteren Versionen kann es nötig sein direkt nach ="true" oder ="false" abzufragen.
Einfache Bedingung anhand von Freitextfeld 1
Du kannst die Standard-Abfrage um viele weitere Felder erweitern, z.B. Artikel-Freitextfelder(hier attr1):
MAX(a.topseller) as has_topseller, MAX(at.attr3) as has_comment, MAX(b.esdarticle) as has_esd, MAX(at.attr1="1") as attribut
Im Feld Eigene Bedingung in der Versandart kann nun attribut oder !attribut abgefragt werden.
1. attribut schaltet die Versandart dann frei, wenn attr1 = true ist.
2. !attribut sperrt die Versandart, wenn attr1 = true ist.
Komplexe Bedingung anhand von eines Freitextfeldes für Mischwarenkörbe
Du kannst auch überprüfen ob es sich um Mischkörbe handelt, also um Körbe mit Artikeln auf die attr1 zutrifft und auf die attr1 nicht zutrifft. So können die Versandkosten auf drei verschiedene Werte aufgeteilt werden.
MAX(a.topseller) as has_topseller, MAX(at.attr3) as has_comment, MAX(b.esdarticle) as has_esd, MIN(attr1='1') as attribut, MAX(attr1='1') as mischkorb
!attribut && !mischkorb -> kein Artikel im Warenkorb auf den attr1 = true zutrifft
attribut && mischkorb -> Nur Artikel im Warenkorb auf die attr1 = true zutrifft
!attribut && mischkorb -> Im Warenkorb liegen mindestens 1 Artikel auf den attr1 = true zutrifft und mindestens 1 Artikel auf den dies nicht zutrifft.
So kann z.B. 3 als kombinierte Versandart gelten, wo einmal ein Paketversand + Speditionskosten berechnet werden, wenn die Artikel getrennt versendet werden müssen.
Vergleichen der Artikelanzahl im Warenkorb mit Artikeln mit bestimmten Attributen
Wenn Du die Anzahl der Artikel im Warenkorb mit der Anzahl der Artikel mit bestimmten Attributen vergleichen willst, um damit zu rechnen, kannst Du das folgende Beispiel verwenden. Wir verwenden hier "attr4":
Zuerst die Abfrage der Werte der Datenbank:
COUNT(a.id) as item_count, MAX(at.attr4='1') as lager1, MAX(at.attr4='2') as lager2
Eine mögliche Berechnung der Versandkosten könnte dann lauten:
// Alle Artikel besitzen lager1
IF(item_count=lager1,1,0)
// Alle Artikel besitzen lager1 oder lager2
IF(item_count=(lager1+lager2),1,0)
Oft möchtest Du als Shopbetreiber bestimmte Artikel versandkostenfrei verschicken, allerdings nur dann wenn diese alleine im Warenkorb liegen. Dies kann beispielsweise für Gutscheine oder kleine Artikel der Fall sein.
Um dies zu erreichen, ergänzt Du die "Erweiterte SQL-Abfrage" unter Einstellungen > Grundeinstellungen > Versandkosten-Modul um folgenden Text:
MIN(b.shippingfree) = 1 AS allshippingfree
Dann erstellst Du für Deine versandfreien Artikel eine eigene Versandart "Versandkostenfrei" (o.Ä.), bei welcher Du im Feld "Eigene Bedingung" "allshippingfree" und als Versandpreis nichts einträgst, damit hier immer versandfrei versendet wird. Wichtig ist hierbei auch dass Du im Feld "Versandkostenfreie Artikel" im Reiter "Erweiterte Einstellungen" unterstützen auswählst.
Bei allen anderen Versandarten fügst Du in das Feld "Eigene Bedingung" "!allshippingfree" ein, damit diese nur Verfügbar sind, wenn nicht alle Artikel versandkostenfrei sind. Für diese setzt Du das Kennzeichen "VersandkostenfreieArtikel" auf "Unterstützen aber trotzdem berechnen".
Es können auch bestimmte Artikelnummern abgefragt werden, oder Teile dieser Nummern, um die Versandart auf diese zu beschränken oder für diese auszuschließen.
MAX(a.topseller) AS has_topseller, MAX(at.attr3) AS has_comment, MAX(b.esdarticle) AS has_esd,MIN(IF(d.ordernumber LIKE '%ARTIKELNUMMER%' OR b.modus <> 0,1,0)) AS artikel
artikel macht eine Versandart nun nur dann verfügbar , wenn der Artikel, bzw. mindestens ein Artikel, welcher die Zeichenkette in der Artikelnummer beinhaltet, im Warenkorb liegt.
!artikel sperrt die Versandart, wenn mindestens einer dieser Artikel im Warenkorb liegt.
Es können Versandarten für Artikel aus bestimmten Kategorien beschränkt werden. Die KategorieID kannst Du im Kategorie-Modul unter "System-ID:" auslesen.
MAX(a.topseller) AS has_topseller, MAX(at.attr3) AS has_comment, MAX(b.esdarticle) AS has_esd,MIN((SELECT 1 FROM s_articles_categories WHERE articleID=a.id AND categoryID=KATEGORIEID)) AS kategorie
kategorie aktiviert die Versandart nur dann, wenn mindestens ein Artikel aus der Kategorie im Warenkorb liegt.
!kategorie sperrt die versandart, wenn mindestens ein Artikel aus der Kategorie im Warenkorb liegt.
Möchstest Du z.B. verschiedene Versandarten nur bis zu einem Maximalgewicht anbieten so kann das Gesamtgewicht abgefragt werden. Der Vergleichswert kann hier beliebig gewählt werden z.B. 1.05, oder 3.
MAX(a.topseller) AS has_topseller, MAX(at.attr3) AS has_comment, MAX(b.esdarticle) AS has_esd, SUM(b.quantity * d.weight) AS gesamtgewicht
gesamtgewicht < WERT aktiviert die Versandart nur dann, wenn das Gesamtgewicht < dem Vergleichswert ist.
gesamtgewicht > WERT aktiviert die Versandart, wenn das Gesamtgewicht > dem Vergleichswert ist.
Soll eine bestimmte Versandart, z.B. auch eine Abschlags-Versandregel, nur an einem bestimmten Datum verfügbar sein so kannst Du die Funktion CURDATE() nutzen. Die Versandregel könnte z.B. nur an diesen Tagen einen Rabatt geben. Hier muss die erweiterte SQL-Abfrage nicht verändert werden, die Regel kann direkt in der Versandart eingegeben werden.
CURDATE() = "2016-03-17" || CURDATE() = "2016-03-18"
Dies aktiviert die Versandart nur am 17.03.2016 und 18.03.2016.
Wenn Du eine bestimmte Versandart nicht in einem Deiner Subshops freigeben willst, dann kannst Du das Kennzeichen b.multishopID abfragen. Hier muss die erweiterte SQL-Abfrage nicht verändert werden, die Regel kann direkt in der Versandart eingegeben werden.
b.multishopID != 1
Eine solche Bedingung sperrt die Versandart im Subshop mit der ID 1.
Soll eine bestimmte Versandart nur für eine bestimmte Kundengruppe verfügbar sein, dann kannst Du das Kennzeichen u.customergroup abfragen. Hier muss die erweiterte SQL-Abfrage nicht verändert werden, die Regel kann direkt in der Versandart eingegeben werden. Die Benutzer-Kennzeichen sind immer erst nach dem Login gefüllt, deswegen ist eine Versandart mit diesem Kennzeichen immer erst nach erfolgreichem Kundenlogin verfügbar.
u.customergroup = "EK"
Diese Bedingung macht die Versandart nur für die Kundengruppe EK verfügbar.
Versand in bestimmte Länder beschränken
Es kann erforderlich sein die Länder nicht nur über die Standard-Funktion im Tab Länder einzuschränken, sondern auch über eine eigene Bedingung. Diese kann anhand des ISO-Codes und der Länder ID erfolgen.
MAX(a.topseller) AS has_topseller, MAX(at.attr3) AS has_comment, MAX(b.esdarticle) AS has_esd, (SELECT countryiso FROM s_core_countries WHERE id = us.country_ID) AS DeliveryCountry
In der eigenen Bedingung kann dann z.B. DeliveryCountry = 'AT' oder DeliveryCountry = 'DE' angegeben werden, um die Versandart für diese Länder spezifisch zu ermöglichen.
Bestimmte Artikel in bestimmtes Land blockieren
Um einen Artikel nicht in ein bestimmtes Land zu liefern erweitern wir die Abfrage über ein Freitext-Feld(attr1) um die Abfrage nach dem Kennzeichen us.country_ID/ub.country_ID. Das Freitext-Feld wird im Artikel auf 1 gesetzt.
MAX(a.topseller) AS has_topseller, MAX(at.attr3) AS has_comment, MAX(b.esdarticle) AS has_esd, MAX(at.attr1="1") AS attribut
IF(IFNULL(us.country_ID,ub.country_ID) != 'LÄNDERID', TRUE, !attribut) fragt zunächst ab, ob das Land des Benutzers ungleich der LänderId ist. Ist das Land ungleich der LänderId ist die Versandart aktiv. Ist das Land gleich der LänderId wird der Wert von attribut abgeprüft. Ist attribut = true wird die Versandart blockiert ist es false wird die Versandart aktiviert.
Soll eine Versandart erst ab einem gewissen Gesamtpreis verfügbar sein kann dieser entsprechend abgefragt werden. Der Vergleichswert kann hier beliebig gewählt werden z.B. 10.50 oder 300.
MAX(a.topseller) AS has_topseller, MAX(at.attr3) AS has_comment, MAX(b.esdarticle) AS has_esd, SUM(b.quantity * b.price) AS gesamtpreis
gesamtpreis < WERT aktiviert die Versandart nur dann, wenn der Gesamtpreis < dem Vergleichswert ist.
gesamtpreis > WERT aktiviert die Versandart, wenn der Gesamtpreis > dem Vergleichswert ist.
Um eine Versandart nur für Artikel eines bestimmten Herstellers zu aktivieren kannst Du das Kennzeichen a.supplierID nutzen. Die supplierID kann in der Tabelle s_articles_suppliers im Feld ID gefunden werden.
MAX(a.topseller) AS has_topseller, MAX(at.attr3) AS has_comment, MAX(b.esdarticle) AS has_esd, MAX(IF(a.supplierID = SUPPLIERID,1,0)) AS hersteller
hersteller aktiviert die Versandart sobald ein Artikel vom entsprechenden Hersteller im Warenkorb liegt.
!hersteller sperrt die Versandard, wenn ein artikel vom entsprechenden Hersteller im Warenkorb liegt.
Teilweise ist es wichtig den Steuersatz der Versandart zu steuern. In diesem Beispiel wir erklärt wie für die Versandkosten immer der Steuersatz gewählt wird, welcher im Warenkorb den größeren Anteil hat. Hierzu muss die erweiterte SQL-Abfrage so ergänzt werden, dass eine Bedingung auf die Gesamtsumme pro Steuersatz abgefragt wird.
MAX(a.topseller) AS has_topseller, MAX(at.attr3) AS has_comment, MAX(b.esdarticle) AS has_esd,IF(SUM(IF(t.tax = 7, (b.price*b.quantity) ,0))>SUM(IF(t.tax = 19, (b.price*b.quantity) ,0)),1,0) AS 7prozent
Nun werden zwei gleiche Versandarten angelegt eine für 7% und eine für 19%. Der Unterschied besteht lediglich im gewählten Steuersatz und der jeweiligen eigenen Bedingung.
Für die 7% Versandart ist die Bedingung 7prozent für die 19% Versandart !7prozent. Für weitere Prozentsätze müsste diese Bedingung und die SQL-Abfrage noch entsprechend erweitert werden.
Im Warenkorb liegen mehr Artikel mit 7% Mehrwertsteuer also ist 7prozent true und die 7% Versandart wird aktiviert
Im Warenkorb liegen mehr Artikel mit 19% Mehrwertsteuer also ist 7prozent false und die 19% Versandart wird aktiviert
Für die eigenen Berechnungen ist es immer wichtig zuvor in den Einstellungen für Versandkosten-Berechnung nach "Eigene Berechnung" einzutragen, ansonsten wird diese nicht berücksichtigt. Die Berechnung wird im Reiter Versandkosten meist anhand des Faktors angegeben und nicht durch feste Werte. Der Faktor 100 ist hier der Standard um genau das berechnete Ergebnis auszugeben.
Bei bestimmten Versandanbietern berechnen sich die Kosten anhand der Maße der Ware. Für eine Berechnung nach Länge, Breite und Höhe könnte die Berechnung z.B. so aussehen:
IF(d.length < 12,IF(d.width < 12,IF(d.height < 12,4.95,6.95),IF(d.height < 12,6.95,8.95)),IF(d.width < 12,IF(d.height < 12,6.95,8.95),IF(d.height < 12,8.95,12.95)))
Ggfs. müssen die Werte noch Summiert werden inkl. Menge, um die Maße aller enthaltenen Artikel zu beinhalten:
IF(SUM(d.length*b.quantity) < 12,IF(SUM(d.width*b.quantity) < 12,IF(SUM(d.height*b.quantity) < 12,4.95,6.95),IF(SUM(d.height*b.quantity) < 12,6.95,8.95)),IF(SUM(d.width*b.quantity) < 12,IF(SUM(d.height*b.quantity) < 12,6.95,8.95),IF(SUM(d.height*b.quantity) < 12,8.95,12.95)))
Die Berechnung gibt für den Faktor 100 folgende Preise aus:
Länge, Breite, Höhe < 12 --> 4,95€
Ein Wert > 12 --> 6,95€
Zwei Werte > 12 --> 8,95€
Alle Werte > 12 --> 12,95€
Obwohl die Brutto-Werte im Shop angezeigt werden, soll sich der Versandkostenfrei-Wert nach dem Netto-Wert richten. Dies kann mit der folgenden Abfrage erreicht werden:
IF((SUM(b.quantity*b.price/(t.tax+100)*100))<50,0,4.95)
Mit dem Faktor 100 im Reiter Versandkosten wird für Netto-Werte unter 50,00€ 0,00€ Versand berechnet, für alle anderen Netto-Werte 4,95€.
Willst Du die Kosten von bestimmten Artikel aus der Summe, ab welcher der Versand kostenfrei erfolgt ausschließen so kann dies mit einem Attribut geschehen. Eine solche Berechnung kann z.B. erfolgen, wenn nur Artikel aus einer bestimmten Sparte versandkostenfrei ab einer Summe X geliefert werden, die anderen Artikel sind für die Ermittlung dieser Summe X nicht zu berücksichtigen.
IF(SUM(IF(at.attr16 != '1',b.price*b.quantity,0))<75,4.95,0)
Mit dem Faktor 100 im Reiter Versandkosten wird für Artikel, welche bei attr16 false eingetragen haben Preis und Menge multipliziert und dann aufsummiert, ist attr16 true so wird 0 zur Summe hinzugefügt. Für die Summe wird abschließend geprüft, ob diese kleiner als 75 ist und in diesem Fall 4,95€ Versankosten berechnet, ansonsten 0,00€.
Sollen für bestimmte Preisgrenzen andere Versandkosten berechnet werden, z.B. mit einem prozentualen Rabatt so kann dies z.B. so aussehen:
IF(SUM(b.quantity*b.price)>600,0,IF(SUM(b.quantity*b.price)> 300,8.5/100*50,IF(SUM(b.quantity*b.price) > 100,8.5/100*80,8.50)))
Die Berechnung gibt für den Faktor 100 folgende Preise aus:
Gesamtpreis < 100,00€ kein Rabatt --> 8,50€
Gesamtpreis > 100,00€ 20% Rabatt --> 6,80€
Gesamtpreis > 300,00€ 50% Rabatt --> 4,25€
Gesamtpreis > 600,00€ --> 0,00€
Dies ist ein Beispiel für eine Aufschlagversandart, welche zur Standard-Versandart hinzuberechnet wird, wenn eine bestimmte Bedingung, z.B. nach Postleitzahlen erfüllt ist.
Als eigene Bedingung kann z.B. für eine einzelne Postleitzahl folgendes hinterlegt werden:
IFNULL(us.zipcode,ub.zipcode) = '48624'
Für mehrere Postleitzahlen oder einen ganzen Bereich könnte dies auch so aussehen:
IFNULL(us.zipcode,ub.zipcode) IN ('48624','48683','48739','59847')
OR
IFNULL(us.zipcode,ub.zipcode) LIKE '49%'
Ein größerer Bereich z.B. von 42999 bis 99000 könnte auch so angegeben werden:
IFNULL(us.zipcode,ub.zipcode) > '42999'
AND IFNULL(us.zipcode,ub.zipcode) < '99000'
Die Berechnung anhand von bestimmten Faktoren kann für die einzelnen Postleitzahlbereiche dann so aussehen:
IF(IFNULL(us.zipcode,ub.zipcode) > '42999' AND IFNULL(us.zipcode,ub.zipcode) < '43999',SUM(d.weight*b.quantity)*2.5,IF(IFNULL(us.zipcode,ub.zipcode) > '43999' AND IFNULL(us.zipcode,ub.zipcode) < '44999',SUM(d.weight*b.quantity)*3.5,IF(IFNULL(us.zipcode,ub.zipcode) > '44999' AND IFNULL(us.zipcode,ub.zipcode) < '45999',SUM(d.weight*b.quantity)*4.5,SUM(d.weight*b.quantity)*5.5)))
Die Berechnung gibt für den Faktor 100 folgende Preise aus:
PLZ zwischen 42999 und 43999 --> Menge*Gewicht*2,5
PLZ zwischen 43999 und 44999 --> Menge*Gewicht*3,5
PLZ zwischen 44999 und 45999 --> Menge*Gewicht*4,5
PLZ in anderem Bereich --> Menge*Gewicht*5,5
Wenn Du andere Versandkostenstaffeln berechnen möchtest, je nachdem in welcher Kategorie sich die Artikel im Warenkorb befinden könnte dies so aussehen:
MIN((SELECT 2 FROM s_articles_categories WHERE articleID=a.id AND categoryID=X))
Das X bei der Abfragen categoryID=X muss durch die ID der entsprechenden Kategorie ersetzt werden.
Im Reiter Versandkosten gibst Du nun eine Staffelung von 0 bis 1 von 2 bis beliebig ein mit den entsprechenden Versandkosten.
Du kannst hier auch mehrere Kategorien nutzen z.B. so:
MIN((SELECT 3 FROM s_articles_categories WHERE articleID=a.id AND categoryID=X)) + MIN((SELECT 5 FROM s_articles_categories WHERE articleID=a.id AND categoryID=X)) + MIN((SELECT 7 FROM s_articles_categories WHERE articleID=a.id AND categoryID=X))
Die Staffelung könnte nun z.B. so aussehen:
0 bis 3 (nur Kategorie 1) --> 3,95€
4 bis 5 (nur Kategorie 2) --> 4,95€
6 bis 7 (nur Kategorie 3) --> 6,95€
8 bis 9 (Kategorie 1 und 2) --> 8,90€
10 bis 11 (Kategorie 1 und 3) --> 10,90€
12 bis 14 (Kategorie 2 und 3) --> 11,90€
15 bis bel. (Alle) --> 15,85€
Du kannst verschiedene Versandkosten je Artikel hinterlegen, wenn dafür ein Artikel-Attribut genutzt wird. In diesem Beispiel nutzen wir attr4 als angelegtes Freitextfeld. Sollen die Versandkosten auch für die Varianten einzeln hinterlegt werden, so muss das angelegte Freitextfeld variantenfähig sein. Nachdem das Feld angelegt wurde kannst Du in den Artikel-Stammdaten den gewünschten Versandkosten-Wert in das Feld eintragen. Soll für den Beispielartikel 4,95€ an Versandkosten berechnet werden so geben wir dort 4.95 ein. Das Dezimaltrennzeichen ist hier immer ein Punkt! In der Versandart wählen wir nun Versandkosten-Berechnung nach: Eigene Berechnung und geben im Reiter Versandkosten von 1 bis beliebig den Faktor 100 ein.
In der eigenen Berechnung im Reiter erweiterte Einstellungen können wir nun eingeben, welche Versandkosten berechnet werden sollen. Hier gibt es verschiedene Möglichkeiten:
SUM(at.attr4*b.quantity) summiert für alle Artikel-Positionen den im Freitextfeld gegebenen Wert und berücksichtigt auch die Menge der einzelnen Positionen.
MAX(at.attr4) nimmt den höchsten Wert aller vorhanden im Freitextfeld der Artikel-Positionen eingegebenen Werte.
SUM(IF(ifnull(at.attr4,'')='',2.95,at.attr4)*b.quantity) summiert für alle Artikel-Positionen das Freitextfeld und berücksichtigt die Menge der Positionen. Ist kein Wert für eine Position im Freitextfeld attr4 eingetragen wird eine Pauschale von 2,95 € hinzuaddiert.
Eigene Berechnung nach Gewicht inkl. Aufteilung in mehrere Pakete
Einige Versandanbieter haben ein maximalgewicht pro Paket. Soll die Versandart nicht direkt gesperrt worden, sonder geprüft werden, ob die Lieferung auf mehrere Pakete verteilt werden kann, kannst Du wie folgt vorgehen. In der Eigenen Bedingung wird hinterlegt, dass die Versandart gesperrt wird, wenn das Maximalgewicht überschritten wird und sich die Bestellung nicht auf Pakete aufteilen lässt. Die erweiterte SQL-Abfrage sieht dann so aus:
MAX(a.topseller) AS has_topseller, MAX(at.attr3) AS has_comment, MAX(b.esdarticle) AS has_esd,IF(MAX(d.weight)<30,1,0) AS aufteilbar
Mit "aufteilbar" wird die Versandart also nur aktiviert, wenn das maximale Gewicht der Artikel pro Stück im Warenkorb < 30kg ist.
Die folgende eigene Berechnung teilt die einzelnen Positionen dann auf mehrere Pakete auf.
IF(SUM(d.weight*b.quantity)>30,CEIL(SUM(b.quantity*d.weight)/30)*4.95,4.95)
Staffelung für Palettenwaren
Oft sollen für Palletten bestimmte Pauschalen pro Kilogramm berechnet werden. Für einen Aufschlag von 50,00€ pro 750kg kannst Du folgenden Eintrag in der eigenen Berechnung nutzen, wichtig ist hier im Reiter Versandkosten von 0 bis beliebig den Faktor 5000 zu hinterlegen.
CEIL(SUM(d.weight*b.quantity)/750)
Dieser Staffellung kann auch noch eine Aufwandspauschale hinzuaddiert werden, z.B. 10,00€.
CEIL(SUM(d.weight*b.quantity)/750)+10
Mit Shopware 5.3 wurden einige Variablen geändert, welche Auswirkungen auf die eigene Berechnung haben können. Hier siehst Du die angepassten Variablen, auf welche Du nach dem Update achten solltest.
Bis 5.3 | Ab 5.3 |
---|---|
userID | user_id |
countryID | country_id |
stateID | state_id |