src/EventListener/OrderPlacedListener.php line 80

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\Entity\Gos\OrderPart;
  4. use App\Entity\Gos\OrderProductVariant;
  5. use App\Entity\Gos\Orders;
  6. use App\Entity\Gos\UserFlag;
  7. use App\Event\OrderPlacedEvent;
  8. use App\Utils\OmittedUpsellUtils;
  9. use App\Utils\SalesManago\v2\Action\Contact\ExternalEvent\Purchase\PurchaseEventAction;
  10. use App\Utils\SalesManago\v2\Action\Contact\ExternalEvent\Purchase\PurchaseEventContext;
  11. use App\Utils\SalesManago\v2\Flow\PurchaseFlow;
  12. use App\Utils\UserFlagService;
  13. use Doctrine\ORM\EntityManagerInterface;
  14. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  15. class OrderPlacedListener implements EventSubscriberInterface
  16. {
  17.     private $entityManager;
  18.     private $userFlagService;
  19.     private $omittedUpsellUtils;
  20.     private $salesManagoPurchaseFlow;
  21.     public function __construct(
  22.         EntityManagerInterface $entityManager,
  23.         UserFlagService $userFlagService,
  24.         OmittedUpsellUtils $omittedUpsellUtils,
  25.         PurchaseFlow $salesManagoPurchaseFlow
  26.     )
  27.     {
  28.         $this->entityManager   $entityManager;
  29.         $this->userFlagService $userFlagService;
  30.         $this->omittedUpsellUtils $omittedUpsellUtils;
  31.         $this->salesManagoPurchaseFlow $salesManagoPurchaseFlow;
  32.     }
  33.     public static function getSubscribedEvents(): array
  34.     {
  35.         return [
  36.             OrderPlacedEvent::ORDER_PLACED => [
  37.                 ['assignFlagToUser'10],
  38.                 ['createOmittedUpsellRecords'9],
  39.                 ['removeOmittedUpsellIfPurchased'8],
  40.                 ['sendSalesManago2PurchaseEvent'7],
  41.             ],
  42.         ];
  43.     }
  44.     public function assignFlagToUser(OrderPlacedEvent $event): void
  45.     {
  46.         $orderId $event->getOrderId();
  47.         $order   $this->entityManager->getRepository(Orders::class)->find($orderId);
  48.         /** @var OrderPart $orderPart */
  49.         foreach ($order->getOrderPart() as $orderPart)
  50.         {
  51.             /** @var OrderProductVariant $opv */
  52.             foreach ($orderPart->getOrderProductVariant() as $opv)
  53.             {
  54.                 $orderedProductVariants[] = $opv->getProductVariant()->getProductVariantNoComplete();
  55.             }
  56.         }
  57.         $matchedUserFlags $this->entityManager
  58.             ->getRepository(UserFlag::class)
  59.             ->findActiveByProductVariant($orderedProductVariants ?? []);
  60.         if (empty($matchedUserFlags))
  61.         {
  62.             return;
  63.         }
  64.         foreach ($matchedUserFlags as $userFlag)
  65.         {
  66.             $this->userFlagService->assignToUser($userFlag$order->getUser());
  67.         }
  68.     }
  69.     public function createOmittedUpsellRecords(OrderPlacedEvent $event)
  70.     {
  71.         $orderId $event->getOrderId();
  72.         $order   $this->entityManager->getRepository(Orders::class)->find($orderId);
  73.         $this->omittedUpsellUtils->create($order);
  74.     }
  75.     public function removeOmittedUpsellIfPurchased(OrderPlacedEvent $event)
  76.     {
  77.         $orderId $event->getOrderId();
  78.         $order   $this->entityManager->getRepository(Orders::class)->find($orderId);
  79.         $this->omittedUpsellUtils->removePurchased($order);
  80.     }
  81.     public function sendSalesManago2PurchaseEvent(OrderPlacedEvent $event): void
  82.     {
  83.         $orderId $event->getOrderId();
  84.         $order   $this->entityManager->getRepository(Orders::class)->find($orderId);
  85.         if (!$order) {
  86.             return;
  87.         }
  88.         $this->salesManagoPurchaseFlow->handle($order);
  89.     }
  90. }