subscribeEvent->sOrder::setPaymentStatus

Hallo! Ich schreibe gerade an einem Plugin das sobald sich der PaymentStatus ändert ausgeführt werden soll. Leider funktioniert das ganze nur z.B. wenn man per Paypal zahlt. Verändert man “händisch” im Backend bzw per Batch-Processing den Status tut sich leider nichts. Kann es sein das die Backendfunktionen setPaymentStatus umgehen? Viele Grüße, Klaus

Wie sieht denn dein subscribeEvent genau aus? Kannst du die Syntax mal posten.

Das Backend arbeitet schon mit Doctrine, daher kann man die sogenannten Doctrine Events verwenden. Hier mehr dazu: http://wiki.shopware.com/Shopware-4-Mod … del_Events Speziell in Deinem Fall kann man folgendes verwenden $this-\>subscribeEvent( 'Shopware\Models\Order\Order::postUpdate', 'postUpdateOrder' );

1 Like

[quote=„mbdus“]Wie sieht denn dein subscribeEvent genau aus? Kannst du die Syntax mal posten.[/quote] public function install() { $this->subscribeEvent(‚sOrder::setPaymentStatus::after‘,‚xyz‘ ); return array(‚success‘ => true, ‚invalidateCache‘ => array(‚frontend‘)); } Wie geschrieben funktioniert mit Paypal ohne Probleme. -klaus

[quote=“waldicom”]Das Backend arbeitet schon mit Doctrine, daher kann man die sogenannten Doctrine Events verwenden. Hier mehr dazu: http://wiki.shopware.com/Shopware-4-Mod … del_Events Speziell in Deinem Fall kann man folgendes verwenden $this-\>subscribeEvent( 'Shopware\Models\Order\Order::postPersist', 'postPersistOrder' ); [/quote] Müsste man nicht auf den Update-Event schauen? -klaus

Jupp, natürlich auf Update. Copy/paste von der o.g. Seite, daher der Fehler. Verzeihung für die Verwirrung.

1 Like

[quote=“waldicom”]Jupp, natürlich auf Update. Copy/paste von der o.g. Seite, daher der Fehler. Verzeihung für die Verwirrung.[/quote] Macht nix, danke für den Tipp! Mir ist ehrlich gesagt nicht ganz klar wie man damit umgeht. Soweit ich das sehe muss ich irgendwie prüfen was sich geändert hat und darauf reagieren. Wenn ich das wie oben (sOrder::setPaymentStatus) definiere bekomme ich die Enlight_Hook_HookArgs und kann von dort die orderID usw auslesen und weiter verarbeiten. Wie kommt man bei den Enlight_Event_EventArgs an die Daten ran? Ich hab da nur das das Verfügbarkeitsprüfungs-Beispiel gefunden was mir da nicht wirklich hilft. -klaus

Etwa so kann man auf die Bestellung zugreifen: Event $this-\>subscribeEvent( 'Shopware\Models\Order\Order::postUpdate', 'onOrderPostUpdate' ); Listener public function onOrderPostUpdate(Enlight\_Event\_EventArgs $arguments) { $model = $arguments-\>get('entity'); // Bestellung selbst (das Model) $orderId = $model-\>getId(); //Bestellungs ID $newStatusId = $model-\>getOrderStatus()-\>getId(); // neuer Status ..... ... prüfen, aktualisieren, was anderes machen .... ..... }

1 Like

Danke :thumbup:

@waldicom schrieb:

Etwa so kann man auf die Bestellung zugreifen:

Event

$this->subscribeEvent( ‚Shopware\Models\Order\Order::postUpdate‘, ‚onOrderPostUpdate‘ );

Listener

public function onOrderPostUpdate(Enlight_Event_EventArgs $arguments) { $model = $arguments->get(‚entity‘); // Bestellung selbst (das Model) $orderId = $model->getId(); //Bestellungs ID $newStatusId = $model->getOrderStatus()->getId(); // neuer Status … … prüfen, aktualisieren, was anderes machen … … }

Sorry, dass ich mich hier in den alten thread einklinke, aber vielleicht kann mir ja hier jemand weiterhelfen. Wenn ich das oben zitierte so anwende erhalte ich immer folgende Fehlermeldung:

SQLSTATE[HY093]: Invalid parameter number: no parameters were bound

Woran kann das liegen?