[GELÖST] Event für Bestellstatus?

hi, ich bin gerade dabei mein erstes Backendplugin zu programmieren. Ich möchte jetzt gern auf die Änderung des Bestellstatus einer Bestellung mit besonderer Zahlungsart reagieren. Ich stelle mir das so vor, dass beim ändern des Bestellstatus eine methode in der Bootstrap aufgerufen wird. Dabei sollte dann idealer weise der neue Status und die Order-Id übergeben werden. Als Rückmeldung würde ich dann gern ein Benachrichtigung im Backend ausgeben. Möglich ist das bestimmt, nur wie stelle ich das an? vielen dank. Gruß, H.

ungeprüft: klink dich doch in Shopware_Controllers_Backend_Order::saveAction() ein, oder probiers mal lt. http://wiki.shopware.de/Grundverstaendn … ent_System per PreUpdate… (leider ist die doku wie man das genau macht noch ein wenig dünn …) funktioniert natürlich nur, wenn die änderung des bestellstatus per backend, bzw doctine passiert… wär toll, wenn du deine erfahrungen hierzu posten würdest!

hi, danke für die Hinweise. Mittlerweile bin ich mir aber gar nicht mehr so sicher, ob das mit dem Event so eine gute Idee ist. Evtl. ist es besser die Stati über einen Cronjob aus der DB zu holen und dann entsprechend zu reagieren. Die Stati können ja schließlich auch von extern, zb. von einer Wawi geändert werden. Du hast ja selbst den Hinweis darauf gegeben dass, das nur funktioniert wenn der Status übers Backend geändert wird… viele Grüße, H.

jupp, mit einem cron bist du natürlich auf der sicheren seite :wink:

hi, ich habe jetzt doch mal versucht das Event abzufangen. $this-\>subscribeEvent('Shopware\Models\Order\Order::preUpdate', 'onUpdate'); das funktioniert soweit auch, nur wie kann ich jetzt auf die daten der Order zugreifen? public static function onUpdate(Enlight\_Event\_EventArgs $args) { $subject = $args-\>get('subject') Shopware()-\>Log()-\>log($subject ,Zend\_Log::INFO); } Egal welche Methode von $args ich anwende, bis auf getName() sind alle NULL.

Hallo zusammen, folgendes steht in einem Model Event zur Verfügung: ‘entity’ => Das Model auf dem das Event gefeuert wurde ‘entityManager’ => Der Manager der das ganze abspeichern will (zu 99,99% Shopware()->Models()) folgendermaßen könnt ihr diese Events registrieren und auf die Parameter zugreifen: (Beispiel Artikel Update) [code] public function install() { $this->subscribeEvent( ‘Shopware\Models\Article\Article::preUpdate’, ‘onArticleUpdate’ ); } … public function onArticleUpdate($arguments) { $article = $arguments->get(‘entity’); $manager = $arguments->get(‘entityManager’); echo "

"; print\_r(\Doctrine\Common\Util\Debug::dump($article, 3)); echo "

"; exit(); } [/code] print_r(\Doctrine\Common\Util\Debug::dump($article, 3)); ==> Möglichkeit Doctrine Models auszugeben. Hoffentlich konnte ich euch damit weiter helfen =) Mit freundlichen Grüßen Oliver Denter

kann man dann in onArticleUpdate() auch auf den request zugreifen um zb. an die POST parameter zu kommen?

Hi, nein der EntityManager und das Entity sind die einzigen Daten die du dort zur Verfügung hast. Alles andere würde kein Sinn machen da nicht immer POST Daten zur Verfügung stehen wenn ein Model gespeichert/gelöscht/geändert wird. Diese Events sind dafür gedacht “Ressourcen” spezifische Abläufe abzudecken, wie z.B.: “Immer wenn ein Artikel gespeichert wird, möchte ich das Gewicht neu berechnen”. “Immer wenn eine Bestellung auf Abgeschlossen gesetzt wird möchte ich …” usw. Mit freundlichen Grüßen Oliver Denter

Vielen dank, Heiko

@Oliver Skroblin schrieb:

Hi,

nein der EntityManager und das Entity sind die einzigen Daten die du dort zur Verfügung hast.

Alles andere würde kein Sinn machen da nicht immer POST Daten zur Verfügung stehen wenn ein Model gespeichert/gelöscht/geändert wird.

Diese Events sind dafür gedacht „Ressourcen“ spezifische Abläufe abzudecken, wie z.B.:

„Immer wenn ein Artikel gespeichert wird, möchte ich das Gewicht neu berechnen“.
„Immer wenn eine Bestellung auf Abgeschlossen gesetzt wird möchte ich …“
usw.

Mit freundlichen Grüßen
Oliver Denter

Ich muss mich da mal in diesen alten Beitrag klinken, denn Du erwähnst da genau etwas, was ich gerade mit den Bestellungen versuche:
„Immer wenn ein Artikel gespeichert wird, möchte ich das Gewicht neu berechnen“ … ich möchte immer dann wenn der Zahlungsstatus auf 12 (‚cleared‘ in  der s_order) gestellt wird eine Aktion starten, die aber nach außen geht und keine Änderungen am backend oder frontend mit sich bringt. Ich muss nur den richtigen Punkt zum Einklinken erwischen.
Bisher mache ich es so:

‚Shopware_Controllers_Backend_Order::saveAction‘ => ‚RequestAusDatenbank‘,

Aber das funktioniert nicht zuverlässig, denn mal sind Daten vorhanden mal nicht. Das Einzige was ich bräuchte ist die id aus der s_order.

Wenn ich das jetzt richtig verstanden habe, wäre es so sicherer:

‚Shopware\Models\Order\Order::postUpdate‘ => ‚RequestAusDatenbank‘,

Nur verstehe ich nicht 100%ig, wie ich dann z.b. an die id komme?

 $order = $arguments-\>get('entity'); $manager = $arguments-\>get('entityManager');

Und jetzt?

@HolleWolle schrieb:

Nur verstehe ich nicht 100%ig, wie ich dann z.b. an die id komme?

$order = $arguments->get(‚entity‘); $manager = $arguments->get(‚entityManager‘);

Und jetzt? 

 versuch’s mal mit

 $order->getId();

 

1 Like