src/EventListener/AdditionalAccessListener.php line 38

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\Entity\Gos\Coupon;
  4. use App\Event\OrderPartPayedEvent;
  5. use App\Utils\AdditionalAccess\AdditionalAccessNotifier;
  6. use App\Utils\AdditionalAccess\DiscountCouponCreator;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. class AdditionalAccessListener implements EventSubscriberInterface
  10. {
  11.     private $additionalAccessNotifier;
  12.     private $discountCouponCreator;
  13.     private $entityManager;
  14.     public function __construct(
  15.         AdditionalAccessNotifier $additionalAccessNotifier,
  16.         DiscountCouponCreator    $discountCouponCreator,
  17.         EntityManagerInterface   $entityManager
  18.     )
  19.     {
  20.         $this->additionalAccessNotifier $additionalAccessNotifier;
  21.         $this->discountCouponCreator    $discountCouponCreator;
  22.         $this->entityManager            $entityManager;
  23.     }
  24.     public static function getSubscribedEvents(): array
  25.     {
  26.         return [
  27.             OrderPartPayedEvent::NAME => [
  28.                 ['createAndSearchAdditionalAccessCoupons'0],
  29.             ],
  30.         ];
  31.     }
  32.     public function createAndSearchAdditionalAccessCoupons(OrderPartPayedEvent $orderPayedEvent): void
  33.     {
  34.         $orderPart $orderPayedEvent->getOrderPart();
  35.         if (null === $orderPart->getOrders()->getUserAdditionalAccessOffer())
  36.         {
  37.             return;
  38.         }
  39.         foreach ($orderPart->getOrders()->getAdditionalAccessBeneficiaries() as $beneficiary)
  40.         {
  41.             if ($beneficiary->getCoupon() instanceof Coupon)
  42.             {
  43.                 continue;
  44.             }
  45.             $coupon $this->discountCouponCreator->createCoupon($beneficiary);
  46.             $beneficiary->setCoupon($coupon);
  47.             $this->additionalAccessNotifier->sendVoucher($beneficiary);
  48.         }
  49.         $this->entityManager->flush();
  50.     }
  51. }