src/Component/Core/Shop/Listener/CartListener.php line 23

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace BitBag\OpenMarketplace\Component\Core\Shop\Listener;
  4. use BitBag\OpenMarketplace\Component\Order\Entity\OrderInterface;
  5. use BitBag\OpenMarketplace\Component\Order\Entity\OrderItemInterface;
  6. use BitBag\OpenMarketplace\Component\RFQ\Entity\OfferInterface;
  7. use BitBag\OpenMarketplace\Component\RFQ\StateMachine\OfferTransitions;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use SM\Factory\FactoryInterface;
  10. use Sylius\Bundle\ResourceBundle\Event\ResourceControllerEvent;
  11. final class CartListener
  12. {
  13.     public function __construct(
  14.         private FactoryInterface $factory,
  15.         private EntityManagerInterface $entityManager,
  16.     ) {
  17.     }
  18.     public function onOrderPreDelete(ResourceControllerEvent $event): void
  19.     {
  20.         $subject $event->getSubject();
  21.         if (!$subject instanceof OrderInterface) {
  22.             return;
  23.         }
  24.         if (OrderInterface::STATE_CART !== $subject->getState()) {
  25.             return;
  26.         }
  27.         $items $subject->getItems();
  28.         /** @var OrderItemInterface $item */
  29.         foreach ($items as $item) {
  30.             $offer $item->getOffer();
  31.             if (!$offer instanceof OfferInterface) {
  32.                 continue;
  33.             }
  34.             $sm $this->factory->get($offerOfferTransitions::GRAPH);
  35.             if ($sm->can(OfferTransitions::TRANSITION_CLEAR_CART)) {
  36.                 $sm->apply(OfferTransitions::TRANSITION_CLEAR_CART);
  37.                 $this->entityManager->persist($offer);
  38.             }
  39.         }
  40.     }
  41.     public function onItemPostRemove(ResourceControllerEvent $event): void
  42.     {
  43.         $subject $event->getSubject();
  44.         if (!$subject instanceof OrderItemInterface) {
  45.             return;
  46.         }
  47.         $offer $subject->getOffer();
  48.         if (!$offer instanceof OfferInterface) {
  49.             return;
  50.         }
  51.         $sm $this->factory->get($offerOfferTransitions::GRAPH);
  52.         if ($sm->can(OfferTransitions::TRANSITION_CLEAR_CART)) {
  53.             $sm->apply(OfferTransitions::TRANSITION_CLEAR_CART);
  54.             $this->entityManager->persist($offer);
  55.         }
  56.         $this->entityManager->flush();
  57.     }
  58. }