src/BookingProcess/ProcessEventSubscriber/QuoteTransformationEventSubscriber.php line 81

Open in your IDE?
  1. <?php
  2. namespace App\BookingProcess\ProcessEventSubscriber;
  3. use App\BookingProcess\ProcessQuoteToBooking\AssureverInsuranceValidator;
  4. use App\BookingProcess\ProcessQuoteToBooking\BookingConfirmationFactory;
  5. use App\BookingProcess\ProcessQuoteToBooking\BookingFactory;
  6. use App\BookingProcess\ProcessQuoteToBooking\ReminderFactory;
  7. use App\Entity\Booking\Quote;
  8. use App\Entity\EventCodes;
  9. use App\Helper\__Quote\QuoteEventHelper;
  10. use App\Manager\Level_1\BookingManager;
  11. use App\Manager\Level_1\ReminderManager;
  12. use Crea\EventBundle\Helper\CreaEventHelper;
  13. use Crea\EventBundle\Model\CreaEvent;
  14. use Crea\ToolsBundle\Helper\EntityManagerHelper;
  15. use Crea\ToolsBundle\Manager\Level_0\ManagerTools\ManagerProviderInterface;
  16. use Exception;
  17. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  18. use Symfony\Contracts\Translation\TranslatorInterface;
  19. use Throwable;
  20. class QuoteTransformationEventSubscriber implements EventSubscriberInterface
  21. {
  22.     protected ManagerProviderInterface $managerProvider;
  23.     protected EntityManagerHelper $entityManagerHelper;
  24.     protected BookingFactory $bookingFactory;
  25.     protected BookingConfirmationFactory $bookingConfirmationFactory;
  26.     protected ReminderFactory $reminderFactory;
  27.     protected AssureverInsuranceValidator $assureverInsuranceValidator;
  28.     protected ReminderManager $reminderManager;
  29.     protected TranslatorInterface $translator;
  30.     protected BookingManager $bookingManager;
  31.     protected QuoteEventHelper $quoteEventHelper;
  32.     protected CreaEventHelper $creaEventHelper;
  33.     public function __construct(ManagerProviderInterface $managerProvider,
  34.                                 EntityManagerHelper $entityManagerHelper,
  35.                                 BookingFactory $bookingFactory,
  36.                                 BookingConfirmationFactory $bookingConfirmationFactory,
  37.                                 ReminderFactory $reminderFactory,
  38.                                 AssureverInsuranceValidator $assureverInsuranceValidator,
  39.                                 ReminderManager $reminderManager,
  40.                                 TranslatorInterface $translator,
  41.                                 BookingManager $bookingManager,
  42.                                 QuoteEventHelper $quoteEventHelper,
  43.                                 CreaEventHelper $creaEventHelper)
  44.     {
  45.         $this->managerProvider $managerProvider;
  46.         $this->entityManagerHelper $entityManagerHelper;
  47.         $this->bookingFactory $bookingFactory;
  48.         $this->bookingConfirmationFactory $bookingConfirmationFactory;
  49.         $this->reminderFactory $reminderFactory;
  50.         $this->assureverInsuranceValidator $assureverInsuranceValidator;
  51.         $this->reminderManager $reminderManager;
  52.         $this->translator $translator;
  53.         $this->bookingManager $bookingManager;
  54.         $this->quoteEventHelper $quoteEventHelper;
  55.         $this->creaEventHelper $creaEventHelper;
  56.     }
  57.     public static function getSubscribedEvents(): array
  58.     {
  59.         return [
  60.             EventCodes::PROCESS_QUOTE_TRANSFORMATION_STEP_CONFIRM_OPTION_ERROR => [['setQuoteOnError'256], ['addManagerTask'254]],
  61.             EventCodes::PROCESS_QUOTE_TRANSFORMATION_STEP_FULLWEB_INCLUDED_SERVICES_ERROR => [['setQuoteOnError'256], ['addManagerTask'254]],
  62.             EventCodes::PROCESS_QUOTE_TRANSFORMATION_STEP_BOOKING_ERROR => [['setQuoteOnError'256], ['addManagerTask'254], ['processDown'253]],
  63.             EventCodes::PROCESS_QUOTE_TRANSFORMATION_STEP_PAYMENT_ERROR => [['setQuoteOnError'256], ['addManagerTask'254], ['processDown'253]],
  64.             EventCodes::PROCESS_QUOTE_TRANSFORMATION_STEP_CALCULATION_ERROR => [['setQuoteOnError'256], ['addManagerTask'254]],
  65.             EventCodes::PROCESS_QUOTE_TRANSFORMATION_STEP_BOOKING_CONFIRMATION_ERROR => [['setQuoteOnError'256], ['addManagerTask'254], ['processDown'253]],
  66.             EventCodes::PROCESS_QUOTE_TRANSFORMATION_STEP_INSURANCE_ERROR => [['setQuoteOnError'256], ['addManagerTask'254], ['processDown'253]],
  67.             EventCodes::PROCESS_QUOTE_TRANSFORMATION_STEP_REMINDER_ERROR => [['setQuoteOnError'256], ['addManagerTask'254], ['processDown'253]],
  68.             EventCodes::PROCESS_QUOTE_TRANSFORMATION_STEP_EMAIL_CONFIRMATION_ERROR => [['setQuoteOnError'256], ['addManagerTask'254]],
  69.             EventCodes::PROCESS_QUOTE_TRANSFORMATION_STEP_EMAIL_OPINION_ERROR => [['setQuoteOnError'256], ['addManagerTask'254]],
  70.             EventCodes::PROCESS_QUOTE_TRANSFORMATION_STEP_EMAIL_CRUISE_PREPARATION_ERROR => [['setQuoteOnError'256], ['addManagerTask'254]],
  71.         ];
  72.     }
  73.     public function setQuoteOnError(CreaEvent $creaEvent)
  74.     {
  75.         $quote $this->getQuote($creaEvent);
  76.         $quote->addToBookingExceptionEvent($creaEvent->getName());
  77.         $this->managerProvider->getManager(Quote::class)->update($quote, ["toBookingOnError" => true], true);
  78.     }
  79.     /**
  80.      * @throws Exception
  81.      */
  82.     public function addManagerTask(CreaEvent $creaEvent)
  83.     {
  84.         $quote $this->getQuote($creaEvent);
  85.         $object $quote->getBooking() !== null $quote->getBooking() : $quote;
  86.         if ($creaEvent->isThrowException()) {
  87.             $this->reminderManager->setReminder($creaEvent->getMessage().' - la transformation doit être complétement relancée.'$object->getSeller(), $object);
  88.         }
  89.         else {
  90.             $this->reminderManager->setReminder($creaEvent->getMessage().' - une partie de la transformation doit être relancée depuis la page de détails de la réservation.'$object->getSeller(), $object);
  91.         }
  92.     }
  93.     /**
  94.      * @throws Exception
  95.      */
  96.     public function processDown(CreaEvent $creaEvent)
  97.     {
  98.         $quote $this->getQuote($creaEvent);
  99.         try {
  100.             if ($creaEvent->getCode() === EventCodes::PROCESS_QUOTE_TRANSFORMATION_STEP_REMINDER_ERROR) {
  101.                 $this->reminderFactory->unBuild($quote->getBooking());
  102.             }
  103.             if ($creaEvent->getCode() === EventCodes::PROCESS_QUOTE_TRANSFORMATION_STEP_INSURANCE_ERROR) {
  104.                 $this->assureverInsuranceValidator->unValidate($quote);
  105.             }
  106.             if ($creaEvent->getCode() === EventCodes::PROCESS_QUOTE_TRANSFORMATION_STEP_BOOKING_CONFIRMATION_ERROR) {
  107.                 $this->bookingConfirmationFactory->unBuild($quote->getBooking());
  108.             }
  109.             if ($creaEvent->getCode() === EventCodes::PROCESS_QUOTE_TRANSFORMATION_STEP_PAYMENT_ERROR) {
  110.                 //todo unSpendCredits and remove payments
  111.             }
  112.             if ($creaEvent->getCode() === EventCodes::PROCESS_QUOTE_TRANSFORMATION_STEP_BOOKING_ERROR) {
  113.                 $this->bookingManager->delete($quote->getBooking());
  114.                 $this->entityManagerHelper->getEM()->flush();
  115.             }
  116.         }
  117.         catch (Throwable $e) {
  118.             $this->quoteEventHelper->setQuoteProcessTransformationEvent($quoteEventCodes::PROCESS_QUOTE_TRANSFORMATION_ERROR_PROCESS_DOWN, [], nullnull$e);
  119.         }
  120.     }
  121.     private function getQuote(CreaEvent $creaEvent): Quote
  122.     {
  123.         /** @var Quote $quote */
  124.         $quote $this->creaEventHelper->getProjectEntity($creaEvent);
  125.         return $quote;
  126.     }
  127. }