Versandkostenfrei wenn Abo-Artikel

Hallo Community,

wir haben das Shopware-Plugin „Abo-Commerce“ in Shopware 5.2.6 installiert. Produkte gibt es einmal als Einmal-Artikel sowie in den angelegten Abo-Versionen.

Wird ein Produkt als Einmal-Artikel bestellt, fallen Versandkosten an. Wird das Produkt hingegen in einer der angelegten Abo-Möglichkeiten gekauft, sollen die Versandkosten entfallen. Hat jemand eine Idee wie das umzusetzen wäre?

Danke
Sebastian
 

Hallo Sebastian,

um im Warenkorb abzufragen ob ein Abo-Artikel im Warenkorb liegt müsste zunächst in der Datei /engine/Shopware/Core/sAdmin.php die Funktion sGetDispatchBasket erweitert werden,da dort werden die einzelnen Tabellen gejoint werden und man die s_order_basket_attributes für die Abfrage benötigt. Will man nun eine weitere Tabelle einbinden, kann man dies nach folgendem Schema tun:

LEFT JOIN s_order_basket_attributes yx
ON b.id = yx.basketID

In der eigenen Bedingung kann dann z.B. folgendes abgefragt werden: MAX(IF(xy.swag_abo_commerce_duration = NULL, false,true)) as abo
Mit abo als eigener Bedingung in der Versandart wird diese nur dann aktiviert, wenn Wenn mindestens ein Abo-Artikel im Warenkorb liegt mit !abo wird die Versandart blockiert für Abo-Artikel. Weitere Möglichkeiten für die individuellen Bedingungen finden sich auch hier im Wiki, z.B. eine Abfrage für Mischwarenkörbe: http://community.shopware.com/Individuelle-Versandkosten-Bedingungen-und-Berechnungen_detail_1933_647.html#Komplexe_Bedingung_anhand_von_eines_Freitextfeldes_f.FCr_Mischwarenk.F6rbe

Viele Grüße aus Schöppingen

1 „Gefällt mir“

Hallo Janine,

danke für die schnelle Antwort und danke für diesen Denkanstoß. Ich werde mir das näher anschauen.

Beste Grüße
Sebastian
 

Hallo Janine,

wo genau in der Funktion sGetDispatchBasket sollte man deinen Codeschnipsel einfügen?

 

Hab es jetzt mal hier eingefügt (s_order_basket_attributes z):

$sql = "
            SELECT
                MIN(d.instock>=b.quantity) as instock,
                MIN(d.instock>=(b.quantity+d.stockmin)) as stockmin,
                MIN(a.laststock) as laststock,
                SUM(d.weight*b.quantity) as weight,
                SUM(IF(a.id,b.quantity,0)) as count_article,
                MAX(b.shippingfree) as shippingfree,
                SUM(IF(b.modus=0,$amount/b.currencyFactor,0)) as amount,
                SUM(IF(b.modus=0,$amount_net/b.currencyFactor,0)) as amount_net,
                SUM(CAST(b.price as DECIMAL(10,2))*b.quantity) as amount_display,
                MAX(d.length) as `length`,
                MAX(d.height) as height,
                MAX(d.width) as width,
                u.id as userID
                $sql_select
            FROM s_order_basket b

            LEFT JOIN s_order_basket_attributes z
            ON b.id = z.basketID            

            LEFT JOIN s_articles a
            ON b.articleID = a.id
            AND b.modus = 0
            AND b.esdarticle = 0

            LEFT JOIN s_articles_details d
            ON (d.ordernumber = b.ordernumber)
            AND d.articleID = a.id

 

Wirft aber einen Fehler. Die Spalte wird nicht gefunden:

Hast du eine Idee?

Danke und viele Grüße!