Es scheint, dass standardmäßig kein Auftragsstatusereignis vorhanden ist. Wie gehen Sie normalerweise vor, um die Änderung des Auftragsstatus zu beobachten? Ich sehe zwei Möglichkeiten: a) Überschreiben Sie das Verkaufs- / Auftragsmodell, um Ihr benutzerdefiniertes Ereignis für eine Statusänderung zu erstellen. B) Beobachten Sie das Auftragsspeicherereignis und sehen Sie sich den Status dort an
Ist einer davon der richtige Weg oder gibt es eine bessere Option?
Edit: Danke für deine bisherigen Antworten. Die Situation ist etwas komplizierter. Ich möchte der Bestellung abhängig vom aktuellen Status Informationen hinzufügen. Hier ist das Problem: Im Ereignis save_before habe ich immer noch den alten Status und nicht jetzt den neuen Status, da im Verkaufs- / Auftragsmodell die Methode _beforeSave () wie folgt lautet:
parent::_beforeSave();
$this->_checkState();
//...
Das Ereignis wird also in verarbeitet, parent::_beforeSave();
ABER der Bestellstatus wird anschließend tatsächlich in geändert $this->_checkState();
(dies ist die automatische Änderung, z. B. wenn Sie eine Rechnung erstellen, wird der Status in die Verarbeitung verschoben, wenn noch keine Sendung vorhanden ist).
Ich kann das save_after-Ereignis auch nicht verwenden, da ich etw speichern möchte. bei der Bestellung und es würde wahrscheinlich alles kaputt machen, um einen Save im save_after-Ereignis aufzurufen.
Irgendwelche Ideen? Meine einzige Idee ist jetzt, das $this->_checkState();
Verhalten in meinem save_before-Beobachter zu replizieren , um herauszufinden, wie der Zustand schließlich sein wird ...
quelle
Ich würde es vorziehen, den alten Zustand aus den Originaldaten des
sales_order_save_before
Ereignisses zu speichern und dies imsales_order_save_after
oder zu überprüfenbefore
, je nachdem, was Sie tun möchten.quelle
getOrigData()
stattdessen verwenden: stackoverflow.com/a/8184430/719023save()
, aber ich finde keinen Ort, an dem dies geschiehtIch finde es einfacher und besser, die
setState
Methode zu überschreibenMage_Sales_Model_Order
:quelle