src/Controller/CircuitController.php line 57

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Circuit;
  4. use App\Entity\Client;
  5. use App\Entity\Coordonnescircuit;
  6. use App\Entity\Reservationcircuit;
  7. use Knp\Component\Pager\PaginatorInterface;
  8. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpFoundation\Response;
  11. use Symfony\Component\Mailer\MailerInterface;
  12. use Symfony\Component\Mime\Email;
  13. use Symfony\Component\Routing\Annotation\Route;
  14. use Doctrine\ORM\EntityManagerInterface;
  15. use App\Entity\Detailreservationcircuit;
  16. use App\Entity\Reservationcircuits;
  17. class CircuitController extends AbstractController
  18. {
  19.     /**
  20.      * @Route("/circuit", name="app_circuit")
  21.      */
  22.     public function index(PaginatorInterface $paginatorRequest $request): Response
  23.     {
  24.         $em $this->getDoctrine()->getManager();
  25.         $data =   $em->createQueryBuilder()
  26.             ->select('c')
  27.             ->from('App\Entity\Circuit','c')
  28.             ->where('c.etat = 1')
  29.             ->getQuery()
  30.             ->getResult()
  31.         ;
  32.         $circuit $paginator->paginate(
  33.             $data,
  34.             $request->query->getInt('page'1),
  35.             6
  36.         );
  37.         return $this->render('circuit/index.html.twig', [
  38.             'circuit' => $circuit,
  39.         ]);
  40.     }
  41.     /**
  42.      * @Route("/detailcircuit/{id}", name="detailcircuit")
  43.      */
  44.     public function details(Circuit $circuitRequest $request)
  45.     {
  46.         $em $this->getDoctrine()->getManager();
  47.         $data $em->createQueryBuilder()
  48.             ->select('c')
  49.             ->from('App\Entity\Circuit','c')
  50.             ->where('c.etat = 1')
  51.             ->getQuery()
  52.             ->getResult()
  53.         ;
  54.         $dataByPack = [];
  55.         foreach ($circuit->getCircuitprices() as $circuitprice) {
  56.             $pack $circuitprice->getPack();
  57.             $dated $circuitprice->getDated()->format('Y-m-d');
  58.             $datef $circuitprice->getDatef()->format('Y-m-d');
  59.             $tarifbb $circuitprice->getPricebb();
  60.             if (!isset($dataByPack[$pack])) {
  61.                 $dataByPack[$pack] = [
  62.                     'dateRanges' => [],
  63.                 ];
  64.             }
  65.             if (!empty($dated) && !empty($datef)) {
  66.                 $dateRange = [
  67.                     'dated' => $dated,
  68.                     'datef' => $datef,
  69.                     'tarifbb' => $tarifbb,
  70.                     'roomData' => [],
  71.                 ];
  72.                 if ($circuitprice->getCircuitpricerooms()->count() > 0) {
  73.                     foreach ($circuitprice->getCircuitpricerooms() as $circuitpriceroom) {
  74.                         $chambre $circuitpriceroom->getCircuitroom()->getChambre();
  75.                         $chambreName $chambre->getName();
  76.                         $dateRange['roomData'][$chambreName] = [
  77.                             'circuitroom' => $circuitpriceroom->getCircuitroom()->getChambre(),
  78.                             'capacity' => $chambre->getCapacity(),
  79.                             'price' => $circuitpriceroom->getPrice(),
  80.                         ];
  81.                     }
  82.                 }
  83.                 $dataByPack[$pack]['dateRanges'][] = $dateRange;
  84.             }
  85.         }
  86.         return $this->render('circuit/detailcircuit.html.twig', [
  87.             'circuit' => $data,
  88.             'c' => $circuit,
  89.             'dataByPack' => $dataByPack,
  90.         ]);
  91.     }
  92.     /**
  93.      * @Route("/nouvelle/{circuitId}", name="nouvelle")
  94.      */
  95.     public function nouvellePage(Request $request$circuitId)
  96.     {
  97.         $em $this->getDoctrine()->getManager();
  98.         $payement $this->getDoctrine()
  99.             ->getRepository('App\Entity\Paiement')
  100.             ->find(1)
  101.         ;
  102.         $circuits $em->createQueryBuilder('c')
  103.             ->select('c')
  104.             ->from('App\Entity\Circuit','c')
  105.             ->where('c.id = :id')
  106.             ->andWhere('c.etat = 1')
  107.             ->setParameter('id'$circuitId)
  108.             ->getQuery()
  109.             ->getOneOrNullResult()
  110.         ;
  111.         // Récupérez les données depuis le formulaire
  112.         $tarifbb $request->request->get('tarifbb');
  113.         $roomData json_decode($request->request->get('roomData'), true);
  114.         $selectedPack $request->request->get('selectedPack');
  115.         $selectedDate $request->request->get('selectedDate');
  116.         $coordonnees = new Client();
  117.         $form $this->createForm('App\Form\ClientType'$coordonnees);
  118.         $form->handleRequest($request);
  119.         if ($form->isSubmitted() && $form->isValid()) {
  120.             $nomClient $coordonnees->getNom();
  121.             $prenomClient $coordonnees->getPrenom();
  122.             $emailClient $coordonnees->getEmail();
  123.             $mobileClient $coordonnees->getMobile();
  124.             $messageClient $coordonnees->getMessage();
  125.             $entityManager $this->getDoctrine()->getManager();
  126.             $entityManager->persist($coordonnees);
  127.             $entityManager->flush();
  128.         }
  129.         // Ajoutez d'autres paramètres au besoin
  130.         // Passez les données à la vue et affichez la nouvelle page
  131.         return $this->render('circuit/reservation.html.twig', [
  132.             'tarifbb' => $tarifbb,
  133.             'roomData' => $roomData,
  134.             'selectedPack' => $selectedPack,
  135.             'selectedDate' => $selectedDate,
  136.             'form' => $form->createView(),
  137.             'circuitId' => $circuitId,
  138.             'circuits' => $circuits,
  139.             'payement' => $payement,
  140.             // Ajoutez d'autres données au besoin
  141.         ]);
  142.     }
  143.     /**
  144.      * @Route("/send-email", name="send_email", methods={"POST"})
  145.      */
  146.     public function envoyerEmails(Request $requestMailerInterface $mailerEntityManagerInterface $entityManager)
  147.     {
  148.         // Récupérez les données JSON envoyées depuis le frontend
  149.         $data json_decode($request->getContent(), true);
  150.         // Récupérez l'adresse e-mail du client à partir des données du formulaire
  151.         $emailClient $data['emailClient'];
  152.         // Construisez le contenu de l'email
  153.         $message = (new Email())
  154.             ->from('amiraarfaoui1989@rusticavoyages.com')
  155.             ->to($emailClient)
  156.             ->subject('Récapitulatif des chambres sélectionnées')
  157.             ->html($this->renderView('circuit/reservation_details.html.twig', [
  158.                 'emailData' => $data,
  159.                 'selectedPack' => $data['selectedPack'],
  160.                 'selectedDate' => $data['selectedDate'],
  161.                 'nomClient' => $data['nomClient'], // Ajoutez le nom du client
  162.                 'prenomClient' => $data['prenomClient'], // Ajoutez le nom du client
  163.                 'emailClient' => $data['emailClient'], // Ajoutez le nom du client
  164.                 'mobileClient' => $data['mobileClient'], // Ajoutez le mobile du client
  165.                 'messageClient' => $data['messageClient'], // Ajoutez le message du client
  166.             ]));
  167.         // Envoyez l'email
  168.         $mailer->send($message);
  169.         // Construisez le contenu de l'email
  170.         $message = (new Email())
  171.             ->from('amiraarfaoui1989@rusticavoyages.com')
  172.             ->to($emailClient)
  173.             ->subject('Récapitulatif des chambres sélectionnées')
  174.             ->html($this->renderView('circuit/reservation_client.html.twig', [
  175.                 'emailData' => $data,
  176.                 'nomClient' => $data['nomClient'], // Ajoutez le nom du client
  177.                 'prenomClient' => $data['prenomClient'], // Ajoutez le nom du client
  178.             ]));
  179.         // Envoyez l'email
  180.         $mailer->send($message);
  181.         // Persistez les données dans l'entité Reservation
  182.         $reservation = new Reservationcircuits();
  183.         $reservation->setNomClient($data['nomClient']);
  184.         $reservation->setPrenomClient($data['prenomClient']);
  185.         $reservation->setEmailClient($data['emailClient']);
  186.         $reservation->setMobileClient($data['mobileClient']);
  187.         $reservation->setMessageClient($data['messageClient']);
  188.         $reservation->setSelectedPack($data['selectedPack']);
  189.         $reservation->setPeriode($data['selectedDate']);
  190.         foreach ($data['typeChambresInfo'] as $info) {
  191.             $chambre = new Detailreservationcircuit();
  192.             $chambre->setNomTypeChambre($info['nom']);
  193.             $chambre->setPrixTotal($info['prixTotal']);
  194.             $chambre->setNombreChambre($info['nombreChambres']);
  195.             // Ajoutez la chambre à la réservation
  196.             $reservation->addDetailreservationcircuit($chambre);
  197.         }
  198.         // Persistez les entités
  199.         $entityManager->persist($reservation);
  200.         $entityManager->flush();
  201.         // Répondez avec une confirmation (modifiable en fonction de vos besoins)
  202.         return $this->redirectToRoute('app_home'); // Remplacez 'accueil' par le nom de votre route d'accueil
  203.     }
  204. }