<?php
namespace App\EventListener;
use App\Entity\Gos\Coupon;
use App\Event\OrderPartPayedEvent;
use App\Utils\AdditionalAccess\AdditionalAccessNotifier;
use App\Utils\AdditionalAccess\DiscountCouponCreator;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class AdditionalAccessListener implements EventSubscriberInterface
{
private $additionalAccessNotifier;
private $discountCouponCreator;
private $entityManager;
public function __construct(
AdditionalAccessNotifier $additionalAccessNotifier,
DiscountCouponCreator $discountCouponCreator,
EntityManagerInterface $entityManager
)
{
$this->additionalAccessNotifier = $additionalAccessNotifier;
$this->discountCouponCreator = $discountCouponCreator;
$this->entityManager = $entityManager;
}
public static function getSubscribedEvents(): array
{
return [
OrderPartPayedEvent::NAME => [
['createAndSearchAdditionalAccessCoupons', 0],
],
];
}
public function createAndSearchAdditionalAccessCoupons(OrderPartPayedEvent $orderPayedEvent): void
{
$orderPart = $orderPayedEvent->getOrderPart();
if (null === $orderPart->getOrders()->getUserAdditionalAccessOffer())
{
return;
}
foreach ($orderPart->getOrders()->getAdditionalAccessBeneficiaries() as $beneficiary)
{
if ($beneficiary->getCoupon() instanceof Coupon)
{
continue;
}
$coupon = $this->discountCouponCreator->createCoupon($beneficiary);
$beneficiary->setCoupon($coupon);
$this->additionalAccessNotifier->sendVoucher($beneficiary);
}
$this->entityManager->flush();
}
}