src/Subscriber/Payment/PaymentProcessSubscriber.php line 46

Open in your IDE?
  1. <?php
  2. namespace App\Subscriber\Payment;
  3. use App\Dictionary\PaymentType;
  4. use App\Event\Payment\BookingCreatedEvent;
  5. use App\Event\Payment\PaymentCreatedEvent;
  6. use App\Service\Payment\PaymentProcessService;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. class PaymentProcessSubscriber implements EventSubscriberInterface
  10. {
  11.     /**
  12.      * @var EntityManagerInterface
  13.      */
  14.     protected $entityManager;
  15.     protected PaymentProcessService $service;
  16.     /**
  17.      * PaymentProcessSubscriber constructor.
  18.      */
  19.     public function __construct(PaymentProcessService $serviceEntityManagerInterface $entityManager)
  20.     {
  21.         $this->entityManager $entityManager;
  22.         $this->service $service;
  23.     }
  24.     public static function getSubscribedEvents(): array
  25.     {
  26.         return [
  27.             PaymentCreatedEvent::class => [
  28.                 ['lockPaymentProcess'0],
  29.             ],
  30.             BookingCreatedEvent::class => [
  31.                 ['onBookingCreatedCreatePaymentProcess'0],
  32.             ],
  33.         ];
  34.     }
  35.     /**
  36.      * @throws \Doctrine\ORM\ORMException
  37.      * @throws \Doctrine\ORM\OptimisticLockException
  38.      */
  39.     public function onBookingCreatedCreatePaymentProcess(BookingCreatedEvent $event): bool
  40.     {
  41.         $account $event->getAccount();
  42.         $member $account->getMember();
  43.         $booking $event->getBooking();
  44.         $process $this->service->createPaymentProcessForMember($member$booking->getUuidForPaymentProcess());
  45.         $this->service->pickPaymentMethod($process$booking->getMethod());
  46.         if ($tariff $booking->getMethod()->getTariffByAmount($booking->getAmount())) {
  47.             $this->service->pickPaymentTariff($process$tariff);
  48.         }
  49.         $booking->setPaymentProcess($process);
  50.         return true;
  51.     }
  52.     public function lockPaymentProcess(PaymentCreatedEvent $event)
  53.     {
  54.         $payment $event->getPayment();
  55.         if (PaymentType::BOOKING !== $payment->getType()) {
  56.             return;
  57.         }
  58.         $process $payment->getPaymentProcess();
  59.         if ($process) {
  60.             $process->setIsLocked(true);
  61.             $this->entityManager->persist($process);
  62.             $this->entityManager->flush();
  63.         }
  64.     }
  65. }