src/EventListener/OrderListener.php line 48

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\EventListener;
  4. use App\Provider\ShippingDateProvider;
  5. use Doctrine\ORM\EntityManagerInterface;
  6. use SM\Factory\FactoryInterface as StateMachineFactoryInterface;
  7. use Sylius\Component\Channel\Context\ChannelContextInterface;
  8. use Sylius\Component\Core\Model\PaymentInterface;
  9. use Sylius\Component\Order\Model\OrderInterface;
  10. use Sylius\Component\Order\Processor\OrderProcessorInterface;
  11. use Sylius\Component\Payment\PaymentTransitions;
  12. use Symfony\Component\EventDispatcher\GenericEvent;
  13. use Webmozart\Assert\Assert;
  14. final class OrderListener
  15. {
  16.     private ChannelContextInterface $channelContext;
  17.     private EntityManagerInterface $manager;
  18.     private ShippingDateProvider $deliveryDateProvider;
  19.     private StateMachineFactoryInterface $stateMachineFactory;
  20.     public function __construct(ChannelContextInterface $channelContextEntityManagerInterface $managerShippingDateProvider $deliveryDateProviderOrderProcessorInterface $orderPromotionProcessorOrderProcessorInterface $orderTaxesProcessorStateMachineFactoryInterface $stateMachineFactory)
  21.     {
  22.         $this->channelContext $channelContext;
  23.         $this->manager $manager;
  24.         $this->deliveryDateProvider $deliveryDateProvider;
  25.         $this->stateMachineFactory $stateMachineFactory;
  26.     }
  27.     public function setShippingDaysEstimated(GenericEvent $event): void
  28.     {
  29.         $order $event->getSubject();
  30.         Assert::isInstanceOf($orderOrderInterface::class);
  31.         $channelCode $this->channelContext->getChannel()->getCode();
  32.         $calculateDate $this->deliveryDateProvider->getDeliveryDate($order);
  33.         $order->setShippingDateEstimated($calculateDate);
  34.         $this->manager->persist($order);
  35.         $this->manager->flush();
  36.     }
  37.     public function preUpdate(GenericEvent $event): void
  38.     {
  39.         /** @var \Sylius\Component\Core\Model\OrderInterface $order */
  40.         $order $event->getSubject();
  41.         $lastPayment $order->getLastPayment();
  42.         if ($lastPayment->getState() === PaymentInterface::STATE_NEW) {
  43.             $lastPayment->setDetails([]);
  44.         }
  45.         if ($lastPayment->getState() === PaymentInterface::STATE_PROCESSING) {
  46.             $sm $this->stateMachineFactory->get($lastPaymentPaymentTransitions::GRAPH);
  47.             if ($sm->can('back_to_new')) {
  48.                 $sm->apply('back_to_new');
  49.             }
  50.             $lastPayment->setDetails([]);
  51.         }
  52.     }
  53. }