src/EventListener/ApiOrderPlacedListener.php line 41

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\Entity\Gos\AdditionalAccess\AdditionalAccessBeneficiary;
  4. use App\Entity\Gos\AdditionalAccess\UserAdditionalAccessOffer;
  5. use App\Entity\Gos\OrderPart;
  6. use App\Entity\Gos\OrderProductVariant;
  7. use App\Entity\Gos\Orders;
  8. use App\Entity\Gos\RenewalOffer\UserRenewalOffer;
  9. use App\Event\ApiOrderPlacedEvent;
  10. use App\Utils\RenewalOffer\RenewalOfferUtils;
  11. use App\Utils\SyncNadzorService;
  12. use Doctrine\ORM\EntityManagerInterface;
  13. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  14. class ApiOrderPlacedListener implements EventSubscriberInterface
  15. {
  16.     private $entityManager;
  17.     private $renewalOfferUtils;
  18.     public function __construct(
  19.         EntityManagerInterface $entityManager,
  20.         RenewalOfferUtils      $renewalOfferUtils
  21.     )
  22.     {
  23.         $this->entityManager     $entityManager;
  24.         $this->renewalOfferUtils $renewalOfferUtils;
  25.     }
  26.     public static function getSubscribedEvents(): array
  27.     {
  28.         return [
  29.             ApiOrderPlacedEvent::API_ORDER_PLACED => [
  30.                 ['assignNextOrderToUserRenewalOffer'10],
  31.                 ['createAdditionalAccessBeneficiary'0],
  32.             ],
  33.         ];
  34.     }
  35.     public function assignNextOrderToUserRenewalOffer(ApiOrderPlacedEvent $event): void
  36.     {
  37.         $orderId $event->getOrderId();
  38.         $session $event->getRequest()->getSession();
  39.         if (null === $userRenewalOfferHash $session->get('renewalOfferHash'))
  40.         {
  41.             return;
  42.         }
  43.         $session->remove('renewalOfferHash');
  44.         $order            $this->entityManager->getRepository(Orders::class)->find($orderId);
  45.         $userRenewalOffer $this->entityManager->getRepository(UserRenewalOffer::class)->findOneByHash($userRenewalOfferHash);
  46.         $possibleVariants $this->renewalOfferUtils->getPossibleVariantsAccordingToOrderedItem(
  47.             $userRenewalOffer->getRenewalOffer()->getSuggestedVariants(),
  48.             $userRenewalOffer->getProductVariantNoComplete()
  49.         );
  50.         $possiblePvNo array_map(function (array $productVariant) {
  51.             return $productVariant['pvNo'];
  52.         }, $possibleVariants);
  53.         /** @var OrderPart $orderPart */
  54.         foreach ($order->getOrderPart() as $orderPart)
  55.         {
  56.             /** @var OrderProductVariant $orderProductVariant */
  57.             foreach ($orderPart->getOrderProductVariant() as $orderProductVariant)
  58.             {
  59.                 if (in_array($orderProductVariant->getProductVariantNoComplete(), $possiblePvNotrue))
  60.                 {
  61.                     $userRenewalOffer->setNextOrder($order);
  62.                     $this->entityManager->persist($userRenewalOffer);
  63.                     $this->entityManager->flush();
  64.                     return;
  65.                 }
  66.             }
  67.         }
  68.     }
  69.     public function createAdditionalAccessBeneficiary(ApiOrderPlacedEvent $event): void
  70.     {
  71.         $session $event->getRequest()->getSession();
  72.         if (
  73.             empty($event->getRequest()->request->get('additionalAccessUsers'))
  74.             || null === $userAdditionalAccessOfferHash $session->get('additionalAccessOfferHash')
  75.         )
  76.         {
  77.             return;
  78.         }
  79.         $session->remove('additionalAccessOfferHash');
  80.         $order                     $this->entityManager->getRepository(Orders::class)
  81.                                                          ->find($event->getOrderId());
  82.         $userAdditionalAccessOffer $this->entityManager->getRepository(UserAdditionalAccessOffer::class)
  83.                                                          ->findOneByHash($userAdditionalAccessOfferHash);
  84.         $order->setUserAdditionalAccessOffer($userAdditionalAccessOffer);
  85.         foreach ($event->getRequest()->request->get('additionalAccessUsers') as $beneficiary)
  86.         {
  87.             $beneficiary = (new AdditionalAccessBeneficiary())
  88.                 ->setOrders($order)
  89.                 ->setFirstName($beneficiary['firstname'])
  90.                 ->setLastName($beneficiary['lastname'])
  91.                 ->setEmail($beneficiary['email'])
  92.                 ->setPhoneNumber($beneficiary['phone'])
  93.                 ->setPosition($beneficiary['position']);
  94.             $this->entityManager->persist($beneficiary);
  95.         }
  96.         $this->entityManager->flush();
  97.     }
  98. }