Bestellstatus ändern in Event Shopware_Modules_Order_SaveOrder_ProcessDetails

Als Shopware-Neuling habe ich aufgrund aktueller Notwendigkeit ein Plugin nach Lehrbuch erstellt, das auf das Event Shopware_Modules_Order_SaveOrder_ProcessDetails reagiert. Bei Eingang einer neuen Bestellung werden diverse Order-Details ausgelesen und per PHP-Code an eine andere Web-App übergeben, so weit so gut!

Jetzt möchte ich bei erfolgreicher Ausführung meines Codes auch gleich noch einen neuen Bestellstatus setzen, z.B. „in Bearbeitung“ statt „Offen“. Außerdem könnte ich eine in meiner Schnittstelle generierte ID in ein unbenutztes Order-Feld schreiben (z.B. Trackingcode, da ich diesen nicht benötige). Hier scheitere ich leider, wahrscheinlich, weil ich die interne Architektur noch nicht genug verstehe.

Wie lässt sich das Ändern des Bestellstatus sowie Speichern eines eigenen Tracking-Code in dem genannten Event bewerkstelligen?

Freundliche Grüße!
Max

Setz doch einfach hinterher nen API-Call ab der für diese Bestellung den neuen Satus setzt.

 

@steinsoftware schrieb:

Setz doch einfach hinterher nen API-Call ab der für diese Bestellung den neuen Satus setzt.

 

“hinterher” ist etwas schwierig, weil mein Einstiegspunkt ja der Event-Handler ist… es müsste schon irgendeine Möglichkeit sein, mit der ich innerhalb der Ereignisbehandlungs-Funktion die Daten der Bestellung manipulieren kann. Oder habe ich einen Denkfehler?

Wie wäre es mit einem Hook: sOrder::sSaveOrder::after ?

 

gibt ja ne lokale API oder nen php api-client von shopware den du einbinden kannst, Lösong von @RAM geht wahrscheinlich auch

@R4M schrieb:

Wie wäre es mit einem Hook: sOrder::sSaveOrder::after ?

 

Die Entscheidung, ob ein neuer Status gesetzt wird, ist vom Ergebnis der Verarbeitung innerhalb von Shopware_Modules_Order_SaveOrder_ProcessDetails abhängig. Einen Hook könnte ich wohl verwenden, aber wie bekomme ich dann die Info “neuer Status ist zu setzen ja/nein” dorthin übergeben?

Aus irgendeinem Grund scheint es für Shopware kaum brauchbare Code-Beispiele zu geben :/ 

Oh Mann:

http://lmgtfy.com/?q=shopware+lokale+api

@steinsoftware schrieb:

Oh Mann:

http://lmgtfy.com/?q=shopware+lokale+api

Schlau geredet, hat leider die Frage nicht beantwortet!

Fatal error : Uncaught exception ‚Shopware\Components\Api\Exception\NotFoundException‘ with message ‚Order by id 20040 not found‘ in /html/shopware/engine/Shopware/Components/Api/Resource/Order.php 

Offenbar ist die Bestellung zu diesem Zeitpunkt noch gar nicht per API auffindbar, vermutlich wegen transaktionaler Verarbeitung. Es müsste also entweder ein anderes Event nach Bestell-Abschluss her oder aber die Änderung des Status muss direkt über die Event-Argumente erfolgen. Letzteres dürfte scheitern, wenn ich den Ablauf in sOrder->sSaveOrder richtig interpretiere.

Wer weiß Rat?

Dann musst du dich wohl nochmal später einklinken und dein Ergebnis vorher abspeichern.

Hab grad bei mir nochmal nachgesehen, hatte auch mal was mit Orderstatus setzen. War aber leider komlett anders; als Teil einer eigenen Orders-API welche Shopware-Bestellungen auf zwei verschiedene Ziele splitten und zusammenführen kann (z.B. Teilweise versendet wenn Ziel1 komplett versendet meldet und Ziel2 in Bearbeitung etc.). Also für deinen Zweck leider total uninteressant…

Hat mich trotzdem auf den richtigen Weg gebracht :slight_smile: Ich überlasse das Status-Setzen einfach dem externen Abwicklungssystem, das seinerseits per API den Order-Status jeweils zum richtigen Zeitpunkt setzen kann. Ist sowieso sauberer - danke nochmal und Thema gelöst.