Event bei Update der Bestellung

Hallo!

Kann mir jemand sagen, welches Event zur Verfügung steht, das aufgerufen wird, wenn eine Bestellung bearbeitet wurde?
Genauer gesagt, würde es sogar reichen, wenn es ein Event gibt, das beim Bearbeiten des Bezahl-Status (und bei einer neuen Bestellung) aufgerufen wird…

Ich arbeite gerade an einer ähnlichen Sache, und mit meinem momentanen Wissensstand würde ich folgende Events empfehlen (ohne Gewähr):

  • Shopware_Modules_Order_SaveOrder_ProcessDetails:
    Wird beim Erstellen einer neuen Order gefeuert. Hier kämpfe ich persönlich gerade mit dem Umstand, dass scheinbar nur die „details“ der Order mitgeschickt werden, nicht jedoch die Order ID. (Falls jemand weiß, wie ich hier an die Order ID komme, wäre ich dankbar!)

  • Shopware_Controllers_Backend_OrderState_Notify:
    Feuert, wenn sich der Bestellstatus oder der Zahlungsstatus einer Bestellung ändert, aber scheinbar nur solange Status-Mails aktiviert sind.

 

Ich frage mich aber gerade, ob es nicht besser wäre, ein Decorated Service zu verwenden, um zuverlässig alle Änderungen einer Bestellung mitzubekommen.
Noch habe ich kein Service gefunden, das man dazu verwenden könnte. (Um Änderungen der User-Daten zu erfassen, kann man z.B. das CustomerService verwenden.) 

Über einen Tipp diesbezüglich würde ich mich freuen, vielleicht sollte ich aber einen eigenen Thread dafür aufmachen. 

Super, vielen Dank dafür!

Falls du oder jemand anderes noch herausbekommt wie man bei Shopware_Modules_Order_SaveOrder_ProcessDetails auch die OrderID bekommt: Ich bin auch interessiert :slight_smile:

Um bei Shopware_Modules_Order_SaveOrder_ProcessDetails an die Order ID ranzukommen, verwende ich derzeit eine zusätzliche Query:

$sOrder = $args->get('subject');
$queryBuilder = $this->container->get('dbal_connection')->createQueryBuilder();
$queryBuilder
  ->select('o.id')
  ->from('s_order', 'o')
  ->where('o.ordernumber = :orderNumber')
  ->orderBy('o.id')
  ->setMaxResults(1)
  ->setParameter('orderNumber', (string) $sOrder->sOrderNumber);
$orderId = $queryBuilder->execute()->fetch(PDO::FETCH_COLUMN);

Ich vermute stark, dass es einen besseren Weg dafür geben muss, und wäre für Tipps weiterhin dankbar.

2 Likes

Die orderNumber ist an der Stelle ja schonmal ganz gut. Damit lässt sich die Bestellung zumindest eindeutig zuordnen.

Danke für den Tipp!