src/Integration/BookingPayment/Subscribers/ConfirmBookingPaymentEventSubscriber.php line 65

Open in your IDE?
  1. <?php
  2. namespace Harmonizely\Integration\BookingPayment\Subscribers;
  3. use Doctrine\ORM\EntityManagerInterface;
  4. use Harmonizely\Calendar\ExternalCalendarManager;
  5. use Harmonizely\CalendarEvents;
  6. use Harmonizely\Integration\BookingPayment\Events\ConfirmBookingPaymentEvent;
  7. use Harmonizely\Model\EventPayment;
  8. use Harmonizely\Service\Panel\Api\ApproveEvent\Contract\IApproveApproveEventService;
  9. use Harmonizely\Types\Company\ApproveEventStatus;
  10. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  11. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  12. use Symfony\Component\EventDispatcher\GenericEvent;
  13. class ConfirmBookingPaymentEventSubscriber implements EventSubscriberInterface
  14. {
  15.     /**
  16.      * @var EntityManagerInterface
  17.      */
  18.     private EntityManagerInterface $entityManager;
  19.     /**
  20.      * @var ExternalCalendarManager
  21.      */
  22.     private ExternalCalendarManager $externalCalendarManager;
  23.     /**
  24.      * @var EventDispatcherInterface
  25.      */
  26.     private EventDispatcherInterface $eventDispatcher;
  27.     private IApproveApproveEventService $approveApproveEventService;
  28.     /**
  29.      * SimplypayConfirmBookingPaymentEventSubscriber constructor.
  30.      *
  31.      * @param EntityManagerInterface $entityManager
  32.      * @param ExternalCalendarManager $externalCalendarManager
  33.      * @param EventDispatcherInterface $eventDispatcher
  34.      * @param IApproveApproveEventService $approveApproveEventService
  35.      */
  36.     public function __construct(
  37.         EntityManagerInterface $entityManager,
  38.         ExternalCalendarManager $externalCalendarManager,
  39.         EventDispatcherInterface $eventDispatcher,
  40.         IApproveApproveEventService $approveApproveEventService
  41.     )
  42.     {
  43.         $this->entityManager $entityManager;
  44.         $this->externalCalendarManager $externalCalendarManager;
  45.         $this->eventDispatcher $eventDispatcher;
  46.         $this->approveApproveEventService $approveApproveEventService;
  47.     }
  48.     /**
  49.      * Returns an array of event names this subscriber wants to listen to.
  50.      *
  51.      * @return string[]
  52.      */
  53.     public static function getSubscribedEvents(): array
  54.     {
  55.         return [
  56.             ConfirmBookingPaymentEvent::NAME => 'onConfirmPayment',
  57.         ];
  58.     }
  59.     /**
  60.      * @param ConfirmBookingPaymentEvent $event
  61.      */
  62.     public function onConfirmPayment(ConfirmBookingPaymentEvent $event): void
  63.     {
  64.         $booking $event->getBooking();
  65.         $payment $booking->getPayment();
  66.         if ($payment && $payment->getStatus() !== EventPayment::STATUS_RECEIVED) {
  67.             $booking->receivePayment();
  68.             $this->entityManager->persist($booking);
  69.             $this->entityManager->flush();
  70.             $approveEvent $booking->getApproveEvent();
  71.             if ($payment->getSystem() !== 'delay' || ($approveEvent && $approveEvent->getStatus() === ApproveEventStatus::STATUS_NEW)) {
  72.                 $this->externalCalendarManager->create($booking);
  73.                 $this->entityManager->flush();
  74.                 $this->eventDispatcher->dispatch(new GenericEvent($booking), CalendarEvents::EVENT_POST_CREATE);
  75.             }
  76.         }
  77.     }
  78. }