Bestellung Positionen Rabattieren - Backend

Hallo liebe Community,

bin schon 2 Tage beschäftigt mit folgende Problem:

 

Aufgabe:

Im Backend unter Kunden -> Bestellungen -> Bestellung -> Positionen soll eine neue Spalte „Rabatt %“ eingepflegt werden. Anhand diese Spalte sollen einzelne Positionen Rabattiert werden können.

 

Was ist bereits getan:

Ich habe bereits die Tabelle „s_order_details_attributes“ um ein Attribut „positionDiscount“ erweitert. Spalte „Rabatt %“ hinzugefügt. Also Rabatt wird erfolgreich gespeichert und ausgelesen und im Backend dargestellt.

 

Problem:

Beim Speichern „savePositionAction()“ muss ich „invoice_amount“ und „invoice_amount_net“ modifizieren. Die Logik zum Berechnen habe ich unter „Models\Order\Order.php“ in die Funktion „calculateInvoiceAmount“ gefunden. Leider kann ich mich an diese Funktion nicht anhooken da es hier um eine Model geht :frowning:

 

Hat jemand einen Vorschlag oder Idee wie ich dieses Problem lösen kann?

 

Danke!

Grüße

 

Verstehe irgendwie nicht, warum solche Logik in eine Model ausgelagert wird. Das mag natürlich sin machen, aber man muss doch die Möglichkeit haben diese Logik verändern zu können.

Im Frontend musste ich auch die Gesamtsumme Modifizieren, da diese Rabatte schon dort zugewiesen werden, aber im Frontend gibt es eine Funktion „getBasketArticles“ die mir zwei schöne Filter Events bietet und damit die Möglichkeit die Berechnung modifizieren zu können.

Hi,

ja, in die Models gehört solche Logik nicht und im Normalfall vermeiden wir das auch. In dem Fall wurde das (meines Wissens) so gemacht, weil wir über die Order-Lifecycle-Events direkt die Lagerbestände oder die Order-History aktualisieren können. Finde ich auch nicht übermäßig prickelnd - von daher kannst du vielleicht echt eben ein Ticket anlegen - meine Stimme hast du :).

Als Lösung würde mir gerade echt nur einfallen, dich selbst auf die Lifecycle-Events zu hängen, dir zu “merken”, welche Order-Models verändert wurden - und dann am Ende des Dispatches über DBAL / SQL deine Rabatt-Kalkulation vorzunehmen - als Übergangslösung. Sonst kommst du da mMn echt schwer ran, leider. 

Besten Gruß,

Daniel

Hallo Daniel,

ich bedanke mich für dein Antwort. Das hilft mir schon mal weiter. Ich werde dann gleich ein Ticket anlegen.

 

Grüße,

Nikita

Ticket Status kann man hier verfolgen.

Hallo,

hast du hier eine Lösung gefunden? Würde mich auch interessieren.

Grüße,

Benick