Hat jmd. evtl. eine Idee, mit welchem Event ich am besten in einem Subscriber bei Änderung des Bestellstatus oder Zahlstatus auf die Bestelldaten bzw. orderId zugriff habe? Ich habe einige Events ausprobiert, aber so richtig funktioniert das nicht. Entweder werden die nicht getriggert oder ich habe keine Daten um an die orderId zu kommen.
Diese Events habe ich ausprobiert: OrderStateMachineStateChangeEvent, StateMachineTransitionEvent, OrderStateChangeEventListener, OrderEvents::ORDER_STATE_WRITTEN_EVENT
Hallo, ich interessiere mich ebenfalls für diesen Anwendungsfall, muss aber doof fragen wie man sich konkret auf dieses Event subscribt. Ich steh irgendwie auf dem Schlauch. Danke vorab.
...
use Shopware\Core\Checkout\Order\OrderEvents;
use Shopware\Core\Checkout\Order\Listener\OrderStateChangeEventListener;
use Shopware\Core\Checkout\Order\OrderDefinition;
use Shopware\Core\Framework\DataAbstractionLayer\Event\EntityWrittenEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Contracts\EventDispatcher\Event;
class OnOrderChanged implements EventSubscriberInterface {
/**
* @return array The event names to listen to
*/
public static function getSubscribedEvents()
{
return [
???...state_enter.order.state.in_progress => ['doMagic']
];
}
public function doMagic(EntityWrittenEvent $event) {
print_r('Hallo Welt.');
}
}
Ich danke dir. Das kann ich mir umbauen für den order-Status…oh man, am Ende doch ganz easy. Wie besorgst du dir in der Folge die Bestellnummer raus? Ich würde wahrscheinlich sogar noch weiter gehen und würde am liebsten noch deutlich mehr Details aus der order ziehen wollen, wie Lieferanschrift, Positionen, Custom-fields etc.
use Shopware\Core\Checkout\Order\OrderEvents;
use Shopware\Core\Checkout\Order\Listener\OrderStateChangeEventListener;
use Shopware\Core\Checkout\Order\OrderDefinition;
use Shopware\Core\Framework\DataAbstractionLayer\Event\EntityWrittenEvent;
use Shopware\Core\Framework\DataAbstractionLayer\Event\EntityLoadedEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Contracts\EventDispatcher\Event;
class OnOrderChanged implements EventSubscriberInterface {
/**
* @return array The event names to listen to
*/
public static function getSubscribedEvents(): array
{
return [
'state_enter.order_transaction.state.paid' => 'doMagic'
];
}
public function doMagic(EntityLoadedEvent $event) {
$orderId = $event->getOrder()->getId();
}
}
ich glaube EntityLoadedEvent ist hier nicht richtig, EntityWrittenEvent aber auch nicht. Man steh ich heute auf dem Schlauch
Mal noch ne allgemeine Frage… hab zwar schon paar Kleinigkeiten programmiert, aber eher im Frontend und weniger im Core, lese immer wieder dass phpstorm mit der IDE quasi alternativlos ist, insbesondere wegen dem Autofill der Klassen etc. Empfiehlst du das auch oder kannst du die alle auswendig?
OK installiere ich grad. Ich hoffe ich nerve nicht schon, Ziel ist eine Mail an das Lager, wenn eine Bestellung den Status X hat. Mit php kann ich natürlich die mail funcion nutzen, aber ich würde gern die in shopware hinterlegte Mail Funktion nutzen, da ich hier auch einen SMTP Server hinterlegt habe. Wie stösst man denn sowas an? Außerdem könnte ich dann in meiner Vision direkt ein Template zur Auflistung der Artikel der jeweiligen Bestellung nutzen oder ist das zu visionär?
Werden diese Events ORDER_STATE_WRITTEN_EVENT oder state_enter.order_transaction.state.paid ausgeführt, wenn die State der Bestellung in der Administartion geändert ist. Ich hab es so probierrt aber es funktioniert nicht !
public static function getSubscribedEvents(): array
{
return [
'state_enter.order_transaction.state.paid' => 'onUpdateState',
OrderEvents::ORDER_STATE_LOADED_EVENT => 'onUpdateState'
];
}
public function onUpdateState(EntityWrittenEvent $event)
{
dd('onUpdateState');
}