src/EventSubscriber/Order/NotifyAdminPrinterCancelOrErrorRequestSubscriber.php line 26

  1. <?php
  2. declare(strict_types=1);
  3. namespace App\EventSubscriber\Order;
  4. use App\Entity\Order\Order;
  5. use App\Message\SendOrderEmailMessage;
  6. use App\OrderProductionStates;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. use Symfony\Component\Messenger\MessageBusInterface;
  9. use Symfony\Component\Workflow\Event\Event;
  10. use Webmozart\Assert\Assert;
  11. /**
  12.  * When a printer requests cancel/error, queue an admin notification (async).
  13.  * Customer cancel email is sent only after admin confirms (canceled/errored).
  14.  */
  15. final class NotifyAdminPrinterCancelOrErrorRequestSubscriber implements EventSubscriberInterface
  16. {
  17.     public function __construct(
  18.         private MessageBusInterface $messageBus,
  19.     ) {
  20.     }
  21.     public function onEnter(Event $event): void
  22.     {
  23.         /** @var Order $order */
  24.         $order $event->getSubject();
  25.         Assert::isInstanceOf($orderOrder::class);
  26.         $orderId $order->getId();
  27.         if (null === $orderId) {
  28.             return;
  29.         }
  30.         $this->messageBus->dispatch(new SendOrderEmailMessage(
  31.             $orderId,
  32.             SendOrderEmailMessage::TYPE_ADMIN_CANCEL_OR_ERROR_REQUEST,
  33.             $order->getProductionState() ?? OrderProductionStates::STATE_CANCEL_PENDING,
  34.         ));
  35.     }
  36.     public static function getSubscribedEvents(): array
  37.     {
  38.         return [
  39.             'workflow.order_production.entered.cancel_pending' => 'onEnter',
  40.             'workflow.order_production.entered.error_pending' => 'onEnter',
  41.         ];
  42.     }
  43. }