src/Controller/ReservationController.php line 38

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Reservation;
  4. use Endroid\QrCode\Builder\Builder;
  5. use App\Entity\Service;
  6. use App\Entity\CategoryServices;
  7. use App\Form\ReservationType;
  8. use App\Repository\ServiceRepository;
  9. use App\Service\MailerManager;
  10. use Doctrine\ORM\EntityManagerInterface;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\HttpFoundation\Response;
  13. use Symfony\Component\Mailer\MailerInterface;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  16. class ReservationController extends AbstractController
  17. {
  18.     /**
  19.      * @var EntityManagerInterface
  20.      */
  21.     private $entityManager;
  22.     public function __construct(EntityManagerInterface $entityManager)
  23.     {
  24.         $this->entityManager $entityManager;
  25.     }
  26.     /**
  27.      * @Route("/reservation", name="new_reservation")
  28.      * @Route("/reservation/{slug}", name="new_reservation_service")
  29.      * @param Request $request
  30.      * @return Response
  31.      */
  32.     public function add(Request $requestMailerManager $mailerManagerstring $slug null): Response
  33.     {
  34.         $reservation = new Reservation();
  35.         if ($slug){
  36.             $service $this->entityManager->getRepository(Service::class)->findOneBy(['slug' => $slug]);
  37.             $reservation->setService($service);
  38.         }
  39.         $form $this->createForm(ReservationType::class, $reservation);
  40.         $form->handleRequest($request);
  41.         if ($form->isSubmitted() && $form->isValid()) {
  42.             //dd($form->getData());
  43.             $date = new \DateTime();
  44.             $dateString $date->format('Ymd');
  45.             $uniqueId uniqid();
  46.             $uniqueCode $dateString '-' $uniqueId;
  47.             $reservation->setCode($uniqueCode);
  48.             $reservation->setMailSended(false);
  49.             $reservation->setCreatedAt(new \DateTimeImmutable());
  50.             $this->entityManager->persist($reservation);
  51.             $this->entityManager->flush();
  52.             $this->addFlash('success''Votre demande a été prise en compte');
  53.             return $this->redirectToRoute('confirmation', ['code' => $reservation->getCode()]);
  54.         }
  55.         return $this->render('reservation/index.html.twig', [
  56.             'form' => $form->createView()
  57.         ]);
  58.     }
  59.     /**
  60.      * @Route("/confirmation/{code}", name="confirmation")
  61.      * @param Request $request
  62.      * @return Response
  63.      */
  64.     public function confirm(Request $requeststring $codeMailerManager $mailerManager): Response
  65.     {
  66.         $error null;
  67.         $qrCodeDataUri null;
  68.         if($reservation $this->entityManager->getRepository(Reservation::class)->findOneBy(['code' => $code])){
  69.             if (!$reservation->isMailSended()){
  70.                 $receiver1 $reservation->getEmail();
  71.                 $receiverRawStudio'levijo2311@gmail.com';
  72.                 $template1 '/includes/mail-reservation.html.twig';
  73.                 $template2 '/includes/mail-nouvelle-reservation.html.twig';
  74.                 $data = [
  75.                     'firstname' => $reservation->getFirstname(),
  76.                     'lastname' => $reservation->getLastname(),
  77.                     'telephone' => '+225'.$reservation->getTelephone(),
  78.                     'date' => $reservation->getReservedAt()->format('Y-m-d H:i:s'),
  79.                     'code' => $reservation->getCode(),
  80.                     'prestation' => $reservation->getService()->getName()
  81.                 ];
  82.                 $sendingMail $mailerManager->sendEmail($receiver1'''Confirmation de votre demande'$template1$data);
  83.                 $mailerManager->sendEmail($receiverRawStudio'contact@rawstudiocompany.com''Nouvelle demande reçue'$template2$data);
  84.                 //dd($sendingMail);
  85.                 if ($sendingMail){
  86.                     $reservation->setMailSended(true);
  87.                     $this->entityManager->persist($reservation);
  88.                     $this->entityManager->flush();
  89.                 }
  90.             }
  91.             // $qrContent = 'https://rawstudiocompany.com/reservation/valid/'.$reservation->getCode();
  92.             // $result = Builder::create()
  93.             //     ->data($qrContent)
  94.             //     ->size(200)
  95.             //     ->margin(10)
  96.             //     ->build();
  97.             // $qrCodeBase64 = base64_encode($result->getString());
  98.             // $qrCodeDataUri = 'data:image/png;base64,' . $qrCodeBase64;
  99.         } else {
  100.             $error "Votre demande n'existe pas";
  101.         }
  102.         return $this->render('reservation/confirmation.html.twig', [
  103.             'reservation' => $reservation,
  104.             'qrCode' => $qrCodeDataUri,
  105.             'error' => $error
  106.         ]);
  107.     }
  108.     /**
  109.      * @Route("/reservation/valid/{code}", name="valid_reservation")
  110.      * @param Request $request
  111.      * @return Response
  112.      */
  113.     public function valid(Reservation $reservation): Response
  114.     {
  115.         $this->denyAccessUnlessGranted('ROLE_ADMIN');
  116.         $confirmation null;
  117.         return $this->render('reservation/valid.html.twig', [
  118.             'reservation' => $reservation,
  119.             'confirmation' => $confirmation
  120.         ]);
  121.     }
  122.     /**
  123.      * @Route("/reservation/process/{code}/{status}", name="process_reservation")
  124.      * @param Request $request
  125.      * @return Response
  126.      */
  127.     public function process(Request $requestint $status): Response
  128.     {
  129.         $this->denyAccessUnlessGranted('ROLE_ADMIN');
  130.         $reservation $this->entityManager->getRepository(Reservation::class)->findOneBy(['code' => $request->get('code')]);
  131.         if (!$status) {
  132.             $confirmation "Vous avez annulé la reservation du client.";
  133.             $reservation->setStatus(false);
  134.         }
  135.         else {
  136.             $confirmation "La reservation du client a bien été validée. Vous pouvez proceder au shooting.";
  137.             $reservation->setStatus(true);
  138.         }
  139.         $this->entityManager->persist($reservation);
  140.         $this->entityManager->flush();
  141.         return $this->render('reservation/valid.html.twig', [
  142.             'reservation' => $reservation,
  143.             'confirmation' => $confirmation
  144.         ]);
  145.     }
  146. }