Hilfe bei der Berechnung von Produktpreisen mit Rabattaktionen

Hallo liebe Shopware-Community,

ich habe eine Frage zum Programmieren von Plugins. Ich möchte die Produktpreise für bestimmte Rabattaktionen speichern. Gibt es eine Methode oder Funktion, um alle Produkte mit ihren neuen Preisen abzurufen, die zu einem bestimmten Rabatt passen? Oder wie kann ich am besten den Preis eines Produkts nach einem angewendeten Rabatt berechnen?

Ich habe bereits in der Dokumentation geschaut, bin jedoch nicht wirklich schlau daraus geworden. Es scheint, als ob ich auf jeden Fall den Warenkorb dafür benötige. Ich habe auch schon einiges ausprobiert, um einen Warenkorb in meinem Plugin zu erstellen und dort dann Produkte und den Rabatt hinzuzufügen. Das hat leider nicht funktioniert. Am Ende habe ich es nur geschafft, indem ich eine Bestellung mit meinem Rabattcode abgeschickt habe und dann den Rabatt aus der order_line_item Tabelle ausgelesen habe.

Wie kann ich herausfinden, wie teuer ein Produkt nach einem Rabatt ist, ohne eine „Fake-Bestellung“ abzuschicken?

Vielen Dank im Voraus für eure Hilfe!

Hallo Dominik!

Die „Rabattaktionen“ werden via dem Shopware\Core\Checkout\Promotion\Cart\PromotionCollector angereichert und via dem Shopware\Core\Checkout\Promotion\Cart\PromotionProcessor in Verbindung mit dem Shopware\Core\Checkout\Promotion\Cart\PromotionCalculator berechnet.

Du könntest nun also mit einem eigenen Processor mit niedrigerer Priorität (< 4900) die LineItems durchsuchen und dir die Values entsprechend der PromotionLineItems berechnen. Um diese für später vorzuhalten, kannst du den errechneten Wert zum Beispiel in ein CustomField des Produkts oder in einer eigenen Entity speichern.

Natürlich musst du dann aber auch nochmals selbst prüfen, ob das eigentliche LineItem für die Promotion gültig ist. Einen wirklich einfachen weg gibt es da leider nicht, aber wenn du dir den Processor und den Collector genau durchliest, kannst du dir da viel abschauen.

Ich hoffe ich konnte dir helfen :slight_smile:

Viele Grüße
Martin