Eigene Berechnung für kostenlosen Versand Hilfe

Hallo,

ich bin noch sehr frisch in Shopware und erst recht in SQL.

Meine Idee ist es eine Kundenkarte a’la Amazon Prime umzusetzen um natürlich die Kunden etwas an unseren Shop zu binden.
Der erste Teil, welcher nur den kostenlosen Versand in der Kasse anzeigt, funktioniert auch schon.
Jetzt habe ich noch das Problem mit, wie lange soll die Kundenkarte gültig sein.

Dafür können die Kunden einen Artikel „Kundenkarte“ kaufen, der in dieser Bestellung alles versandkostenfrei macht (geht ja mit dem Häkchen bei versandkostenfrei).
Ab diesem Datum soll die Kundenkarte für 1 Jahr (365 Tage) laufen und dann automatisch deaktiviert werden.
Dafür habe ich 2 Freitextfelder bei Kunde (s_user_attributes) angelegt und lasse es natürlich im Backend anzeigen.

Kundenkarte: customer_card (als checkbox - muss vorerst von Hand aktiviert werden)
Kaufdatum Kundenkarte: customer_card_buydate (als Datum - muss vorerst von Hand eingetragen werden)

Jetzt habe ich erst mal bei erweiterte SQL Abfrage im Versandkostenmodul (Grundeinstellungen) folgendes angehängt:
, MAX((SELECT customer_card FROM s_user_attributes WHERE userID = :userId)) AS customer_card

In der Versandkostenverwaltung habe ich eine neue Versandart erstellt: kostenloser Versand (Kundenkarte)

Versandkostenberechnung nach : eigene Berechnung
Versandkostenfrei ab: 0,01 €

Im Tab Versandkosten:
Von: 0
Bis: beliebig
Faktor: 100%

Im Tab eigene Einstellungen:
eigene Bedingungen: customer_card

Bei den anderen Versandkosten habe ich in das Feld „eigene Bedingungen:“ im eigene Einstellungen Tab
!customer_card eingetragen

Mit diesen Einstellungen funktioniert es, dass wenn ich im Kundenprofil eines Kunden das Häkchen bei Kundenkarte setze, nur noch die Versandkosten „kostenloser Versand (Kundenkarte)“ angezeigt wird.

Soweit bin ich schon sehr zufrieden.
Nun möchte ich aber, dass wenn ich ein Datum in das Feld "Kaufdatum Kundenkarte"einfüge, es die Zahlungsart 365 Tage zulässt. Danach ist die „Abfrage“ ja nicht mehr richtig und zeigt ab diesem Datum wieder die normalen Versandgebühren an (so meine Idee).
Der Kunde kann dann einfach wieder den Artikel „Kundenkarte“ kaufen und das spiel beginnt von vorne.

Kann mir einer einen Tipp geben wie ich das unter „eigene Berechnung“ abfrage?
Leider bin ich noch nicht so weit mit den Abfragen in Shopware.

Vielleicht liege ich ja auch komplett falsch und man kann das leichter umsetzen.
Ein Plugin habe ich jedoch nicht gefunden.

Bin für jede Hilfe Dankbar.

Grüße
Tobias

Hi Tobias,

da Du Dich ja schon gut in das Thema reingeschafft hast, denke ich es reicht ein kurzer Tipp: das machst Du analog wie bei customer_card mit SQL:
, SELECT DATEDIFF(CURDATE(), customer_card_buydate) FROM … WHERE … AS days_since_purchase gibt Dir die Anzahl der Tage seit Kaufdatum. Dann die Bedingungen entsprechend erweitern (… AND days_since_purchase < 366). Feddich.

LG Phil

PS: da Kunden eindeutig sind und du somit immer genau einen Record zurückbekommst, hat das MAX() keinen Effekt (schadet aber auch nicht). Das brauchst Du nur, wenn z.B. alle Artikel im Warenkorb betrachtet werden sollen und der höchste bzw mit MIN der niedrigste Wert interessiert.

Hallo Phil,

wow, danke dir. Werde das heute gleich mal testen.
Hatte gestern auch schon mit CURDATE versucht was zu erstellen, allerdings reichte da meine Kenntnis doch nicht aus :slight_smile:

Sobald ich erfolg habe schreibe ich meine Ergebnisse :+1:

Tobias

So,

ich habe nun deinen Code angepasst und eingefügt. :+1:

, MAX((SELECT DATEDIFF(CURDATE(), customer_card_buydate) FROM s_user_attributes WHERE userID = :userId)) AS days_since_purchase

PS: da Kunden eindeutig sind und du somit immer genau einen Record zurückbekommst, hat das MAX() keinen Effekt (schadet aber auch nicht). Das brauchst Du nur, wenn z.B. alle Artikel im Warenkorb betrachtet werden sollen und der höchste bzw mit MIN der niedrigste Wert interessiert.<

Leider geht es bei mir nicht ohne das MAX am Anfang deshalb habe ich es bei deinem Code auch eingefügt. Habe es in verschiedenen Varianten versucht. Allerdings läd er mir dann nicht mehr den Warenkorb. Sobald ich es wieder dran habe funktioniert es.

Bei meinem „Kostenlosen Versand (Kundenkarte)“ habe ich im Tab eigene Einstellungen:
folgendes stehen.
eigene Bedingungen: customer_card && days_since_purchase < 366

Beim „DHL Versand“ musste ich natürlich auch noch was bei den eigenen Bedingungen einfügen:
customer_card && days_since_purchase > 365

Funktioniert bis jetzt :grinning:
Allerdrings muss man da echt viel testen und jede Möglichkeit abdecken (Kunde, Kein Kunde, Kunde mit Kundenkarte).
Da ich noch weitere Attribute habe, die ich abfrage (wegen Geschenk-Gutscheinen) ist es noch ein bisschen umfangreicher bei den eigenen Bedingungen geworden.

Als letztes habe ich beim „Kostenlosen Versand (Kundenkarte)“ noch folgende Formel bei eigene Berechnung hinterlegt um evtl. den Kostenlosen Versand doch erst ab 10€ zu ermöglichen, da wir viele Cent Artikel haben.

IF(SUM(b.quantity*b.price)<10,4.95,0)

Danke.
Ich hoffe jemandem damit auch helfen zu können, falls er das gleiche sucht.

Tobias