Rabatt wird falsch berechnet, wenn Preise der LineItems manipuliert werden

Folgt man diesem Guide und manipuliert die Preise von LineItems im Warenkorb, wird bei prozentualen Rabattaktionen trotzdem stets der reguläre Preis des Artikels genommen, nicht der manipulierte.

Der Anwendungsfall ist konkret dieser: Im Shop werden Produkte nach Maß verkauft. Die bei den Produkten hinterlegten Preise entsprechen einem Quadratmeter. Auf der Produktdetailseite können in einem Konfigurator Höhe und Breite angegeben und (tw. kostenpflichtige) Optionen dazugebucht werden. Mit dem oben verlinkten Code wird anschließend aus diesen Angaben der finale Preis berechnet. So weit, so gut. Problematisch wird es bei dem 10% Eröffnungsrabatt. Dieser nimmt immer den Quadratmeterpreis und nicht den manipulierten.

Wir haben das jetzt mit einem benutzerdefinierten Rabatt gelöst, das ist aber suboptimal, da der Seitenbetreiber den Rabattzeitraum sowie die Prozente nicht mehr über das Shopware-Backend setzen kann bzw. hierfür kompliziert noch eine gesonderte Backend-Seite erstellt werden müsste.

Hat jemand vielleicht eine Idee, wie man das eleganter lösen könnte, sodass prozentuale Rabatte den im CartProcessor mit $lineItem->setPrice() gesetzten Preis verwenden?

Wir haben das gleiche Problem. Allerdings nutzen wir zur Preismanipulation das Plugin Form Builder .

Hat schon jemand eine Lösung?

Selbesproblem haben wir leider auch

Schreibt’s doch in den Issue-Tracker: https://issues.shopware.com/

Manchmal kann die Lösung so einfach sein.

Nach langem suchen konnte ich das Problem lösen.

Im Example von der Shopware Dev Doc wird beim registrieren von OverwrittenPriceCollector priority 4500 angegeben.

Die Promotion Berechnung scheint aber eine höhere Priorität in Shopware selbst zu haben.

Nach Anpassung auf 5000 statt 4500:
<tag name="shopware.cart.processor" priority="5000" /> <tag name="shopware.cart.collector" priority="5000" />

klappt nun die Berechnung korrekt mit dem Gutschein

2 „Gefällt mir“

Danke, habe auch ewig gesucht, was das Problem ist!