src/EventSubscriber/DatesEventsSubscriber.php line 29

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\AppointmentDate;
  4. use App\Event\CreateDatesEvent;
  5. use App\Repository\AppointmentDateRepository;
  6. use App\Service\TimeSlotCreator;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. class DatesEventsSubscriber implements EventSubscriberInterface
  10. {
  11.     public function __construct(
  12.         private EntityManagerInterface $manager,
  13.         private TimeSlotCreator $timeSlotCreator,
  14.         private AppointmentDateRepository $repository
  15.     ) {
  16.     }
  17.     public static function getSubscribedEvents(): array
  18.     {
  19.         return [
  20.             CreateDatesEvent::NAME => 'dateCreation',
  21.         ];
  22.     }
  23.     public function dateCreation(CreateDatesEvent $event): void
  24.     {
  25.         $dateToSave null;
  26.         foreach ($event->getPostDates() as $postDate) {
  27.             $datetime = new \DateTime($postDate);
  28.             $existDate $this->repository->findOneBy([
  29.                 'date' => $datetime
  30.             ]);
  31.             if(!$existDate) {
  32.                 $start = new \DateTime($datetime->format('Y-m-d') . 'T' $event->getDate()->getStartTime()->format('H:i'));
  33.                 $end   = new \DateTime($datetime->format('Y-m-d') . 'T' $event->getDate()->getEndTime()->format('H:i'));
  34.                 $startClose null;
  35.                 $endClose   null;
  36.                 if($event->getDate()->getCloseStartTime() && $event->getDate()->getCloseEndTime()) {
  37.                     $startClose = new \DateTime($datetime->format('Y-m-d') . 'T' $event->getDate()->getCloseStartTime()->format('H:i'));
  38.                     $endClose   = new \DateTime($datetime->format('Y-m-d') . 'T' $event->getDate()->getCloseEndTime()->format('H:i'));
  39.                 }
  40.                 $dateToSave = new AppointmentDate();
  41.                 $dateToSave
  42.                     ->setDate($datetime)
  43.                     ->setStartTime($start)
  44.                     ->setEndTime($end)
  45.                     ->setCloseStartTime($startClose)
  46.                     ->setCloseEndTime($endClose)
  47.                 ;
  48.                 $this->manager->persist($dateToSave);
  49.                 $this->timeSlotCreator->generateSlots($dateToSave);
  50.             }
  51.         }
  52.         $event->setCreatedDate($dateToSave);
  53.         $this->manager->flush();
  54.     }
  55. }