src/Controller/SejourController.php line 59

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Chambre;
  4. use App\Entity\Client;
  5. use App\Entity\Coordonneesvo;
  6. use App\Entity\Reservationsejour;
  7. use App\Entity\Sejour;
  8. use App\Entity\Sejourprice;
  9. use App\Entity\Sejoursearch;
  10. use App\Form\GuestType;
  11. use App\Form\SejoursearchType;
  12. use Knp\Component\Pager\PaginatorInterface;
  13. use Symfony\Component\Mailer\MailerInterface;
  14. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  15. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  16. use Symfony\Component\Form\Extension\Core\Type\CollectionType;
  17. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  18. use Symfony\Component\Form\Extension\Core\Type\TextType;
  19. use Symfony\Component\HttpFoundation\JsonResponse;
  20. use Symfony\Component\HttpFoundation\Request;
  21. use Symfony\Component\HttpFoundation\Response;
  22. use Symfony\Component\Mime\Email;
  23. use Symfony\Component\Routing\Annotation\Route;
  24. use Doctrine\ORM\EntityManagerInterface;
  25. use App\Entity\Detailreservationsejour;
  26. use App\Entity\Reservationsejours;
  27. class SejourController extends AbstractController
  28. {
  29.     /**
  30.      * @Route("/sejour", name="app_sejour")
  31.      */
  32.     public function index(PaginatorInterface $paginatorRequest $request): Response
  33.     {
  34.         $em $this->getDoctrine()->getManager();
  35.         $data =   $em->createQueryBuilder()
  36.             ->select('c')
  37.             ->from('App\Entity\Sejour','c')
  38.             ->where('c.etat = 1')
  39.             ->getQuery()
  40.             ->getResult()
  41.         ;
  42.         $sejour $paginator->paginate(
  43.             $data,
  44.             $request->query->getInt('page'1),
  45.             6
  46.         );
  47.         return $this->render('sejour/index.html.twig', [
  48.             'sejour' => $sejour
  49.         ]);
  50.     }
  51.     /**
  52.      * @Route("/detailsejour/{id}", name="detailsejour")
  53.      */
  54.     public function details(Sejour $sejourRequest $request)
  55.     {
  56.         $em $this->getDoctrine()->getManager();
  57.         $data $em->createQueryBuilder()
  58.             ->select('s')
  59.             ->from('App\Entity\Sejour','s')
  60.             ->where('s.etat = 1')
  61.             ->getQuery()
  62.             ->getResult()
  63.         ;
  64.         $dataByPack = [];
  65.         foreach ($sejour->getSejourprices() as $sejourprice) {
  66.             $pack $sejourprice->getPack();
  67.             $dated $sejourprice->getDated()->format('Y-m-d');
  68.             $datef $sejourprice->getDatef()->format('Y-m-d');
  69.             $tarifbb $sejourprice->getPricebb();
  70.             $tarifenf252 $sejourprice->getEnf252();
  71.             $tarifenf6112 $sejourprice->getEnf6112();
  72.             $tarifenf25 $sejourprice->getEnf25();
  73.             $tarifenf611 $sejourprice->getEnf611();
  74.             $demandebb $sejourprice->isDemandebb();
  75.             $demande252 $sejourprice->isDemande252();
  76.             $demande6112 $sejourprice->isDemande6112();
  77.             $demande25 $sejourprice->isDemande25();
  78.             $demande611 $sejourprice->isDemande611();
  79.             if (!isset($dataByPack[$pack])) {
  80.                 $dataByPack[$pack] = [
  81.                     'dateRanges' => [],
  82.                 ];
  83.             }
  84.             if (!empty($dated) && !empty($datef)) {
  85.                 $dateRange = [
  86.                     'dated' => $dated,
  87.                     'datef' => $datef,
  88.                     'tarifbb' => $tarifbb,
  89.                     'tarifenf252' => $tarifenf252,
  90.                     'tarifenf6112' => $tarifenf6112,
  91.                     'tarifenf25' => $tarifenf25,
  92.                     'tarifenf611' => $tarifenf611,
  93.                     'demandebb' => $demandebb,
  94.                     'demande252' => $demande252,
  95.                     'demande6112' => $demande6112,
  96.                     'demande25' => $demande25,
  97.                     'demande611' => $demande611,
  98.                     'roomData' => [],
  99.                 ];
  100.                 if ($sejourprice->getSejourpricerooms()->count() > 0) {
  101.                     foreach ($sejourprice->getSejourpricerooms() as $sejourpriceroom) {
  102.                         $chambre $sejourpriceroom->getSejourroom()->getChambre();
  103.                         $chambreName $chambre->getName();
  104.                         $dateRange['roomData'][$chambreName] = [
  105.                             'sejourroom' => $sejourpriceroom->getSejourroom()->getChambre(),
  106.                             'capacity' => $chambre->getCapacity(),
  107.                             'price' => $sejourpriceroom->getPrice(),
  108.                         ];
  109.                     }
  110.                 }
  111.                 $dataByPack[$pack]['dateRanges'][] = $dateRange;
  112.             }
  113.         }
  114.         return $this->render('sejour/detailsejours.html.twig', [
  115.             'sejour' => $data,
  116.             'vo' => $sejour,
  117.             'dataByPack' => $dataByPack,
  118.         ]);
  119.     }
  120.     /**
  121.      * @Route("/nouvelle-page/{sejourId}", name="nouvelle_page")
  122.      */
  123.     public function nouvellePage(Request $request$sejourIdMailerInterface $mailer): Response
  124.     {
  125.         $em $this->getDoctrine()->getManager();
  126.         $payement $this->getDoctrine()
  127.             ->getRepository('App\Entity\Paiement')
  128.             ->find(1)
  129.         ;
  130.         $sejours $em->createQueryBuilder('s')
  131.             ->select('s')
  132.             ->from('App\Entity\Sejour','s')
  133.             ->where('s.id = :id')
  134.             ->andWhere('s.etat = 1')
  135.             ->setParameter('id'$sejourId)
  136.             ->getQuery()
  137.             ->getOneOrNullResult()
  138.         ;
  139.         // Récupérez les données depuis le formulaire
  140.         $tarifbb $request->request->get('tarifbb');
  141.         $tarifenf252 $request->request->get('tarifenf252');
  142.         $tarifenf6112 $request->request->get('tarifenf6112');
  143.         $tarifenf25 $request->request->get('tarifenf25');
  144.         $tarifenf611 $request->request->get('tarifenf611');
  145.         $roomData json_decode($request->request->get('roomData'), true);
  146.         $selectedPack $request->request->get('selectedPack');
  147.         $selectedDate $request->request->get('selectedDate');
  148.         $coordonnees = new Client();
  149.         $form $this->createForm('App\Form\ClientType'$coordonnees);
  150.         $form->handleRequest($request);
  151.         if ($form->isSubmitted() && $form->isValid()) {
  152.             // Si le formulaire est soumis et valide, faites quelque chose avec les données du formulaire
  153.             // Par exemple, persistez les données dans la base de données
  154.             $nomClient $coordonnees->getNom();
  155.             $prenomClient $coordonnees->getPrenom();
  156.             $emailClient $coordonnees->getEmail();
  157.             $mobileClient $coordonnees->getMobile();
  158.             $messageClient $coordonnees->getMessage();
  159.             $especeClient $coordonnees->isEspece();
  160.             $chequeClient $coordonnees->isCheque();
  161.             $agencebkClient $coordonnees->isAgencebk();
  162.             $agencetnClient $coordonnees->isAgencetn();
  163.             $entityManager $this->getDoctrine()->getManager();
  164.             $entityManager->persist($coordonnees);
  165.             $entityManager->flush();
  166.         }
  167.         // Passez les données à la vue et affichez la nouvelle page
  168.         return $this->render('sejour/reservation.html.twig', [
  169.             'tarifbb' => $tarifbb,
  170.             'tarifenf252' => $tarifenf252,
  171.             'tarifenf6112' => $tarifenf6112,
  172.             'tarifenf25' => $tarifenf25,
  173.             'tarifenf611' => $tarifenf611,
  174.             'roomData' => $roomData,
  175.             'selectedPack' => $selectedPack,
  176.             'selectedDate' => $selectedDate,
  177.             'form' => $form->createView(),
  178.             'sejourId' => $sejourId,
  179.             'sejours' => $sejours,
  180.             'payement' => $payement,
  181.             // Ajoutez d'autres données au besoin
  182.         ]);
  183.     }
  184.     /**
  185.      * @Route("/envoyer-emails", name="envoyer_emails", methods={"POST"})
  186.      */
  187.     public function envoyerEmails(Request $requestMailerInterface $mailerEntityManagerInterface $entityManager): Response
  188.     {
  189.         
  190.         // Récupérez les données JSON envoyées depuis le frontend
  191.         $data json_decode($request->getContent(), true);
  192.         // Récupérez l'adresse e-mail du client à partir des données du formulaire
  193.         $emailClient $data['emailClient'];
  194.         // Construisez le contenu de l'email
  195.         $message = (new Email())
  196.             ->from('reservation@rusticavoyages.com')
  197.             ->to('reservation@rusticavoyages.com')
  198.             ->subject('Récapitulatif des chambres sélectionnées')
  199.             ->html($this->renderView('sejour/informations.html.twig', [
  200.                 'emailData' => $data,
  201.                 'selectedPack' => $data['selectedPack'],
  202.                 'selectedDate' => $data['selectedDate'],
  203.                 'nomClient' => $data['nomClient'], // Ajoutez le nom du client
  204.                 'prenomClient' => $data['prenomClient'], // Ajoutez le nom du client
  205.                 'emailClient' => $data['emailClient'], // Ajoutez le nom du client
  206.                 'mobileClient' => $data['mobileClient'], // Ajoutez le mobile du client
  207.                 'messageClient' => $data['messageClient'], // Ajoutez le message du client
  208.                 'especeClient' => $data['especeClient'],
  209.                 'chequeClient' => $data['chequeClient'],
  210.                 'agencebkClient' => $data['agencebkClient'],
  211.                 'agencetnClient' => $data['agencetnClient'],
  212.                 'sejourNom' => $data['sejourNom'],
  213.                 'chambres' => $data['chambres'],
  214.             ]));
  215.         // Envoyez l'email
  216.         $mailer->send($message);
  217.         // Construisez le contenu de l'email
  218.         $message = (new Email())
  219.             ->from('reservation@rusticavoyages.com')
  220.             ->to($emailClient)
  221.             ->subject('Récapitulatif des chambres sélectionnées')
  222.             ->html($this->renderView('sejour/informations_client.html.twig', [
  223.                 'emailData' => $data,
  224.                 'nomClient' => $data['nomClient'], // Ajoutez le nom du client
  225.                 'prenomClient' => $data['prenomClient'], // Ajoutez le nom du client
  226.             ]));
  227.         // Envoyez l'email
  228.         $mailer->send($message);
  229.         // Persistez les données dans l'entité Reservation
  230.         $reservation = new Reservationsejours();
  231.         $reservation->setNomClient($data['nomClient']);
  232.         $reservation->setPrenomClient($data['prenomClient']);
  233.         $reservation->setEmailClient($data['emailClient']);
  234.         $reservation->setMobileClient($data['mobileClient']);
  235.         $reservation->setMessageClient($data['messageClient']);
  236.         $reservation->setSelectedPack($data['selectedPack']);
  237.         $reservation->setPeriode($data['selectedDate']);
  238.         foreach ($data['typeChambresInfo'] as $info) {
  239.             $chambre = new Detailreservationsejour();
  240.             $chambre->setNomTypeChambre($info['nom']);
  241.             $chambre->setPrixTotal($info['prixTotal']);
  242.             $chambre->setNombreChambre($info['nombreChambres']);
  243.             // Ajoutez la chambre à la réservation
  244.             $reservation->addDetailreservationsejour($chambre);
  245.         }
  246.         $client = new Client();
  247.         $client->setNom($data['nomClient']);
  248.         $client->setPrenom($data['prenomClient']);
  249.         $client->setEmail($data['emailClient']);
  250.         $client->setMobile($data['mobileClient']);
  251.         $client->setMessage($data['messageClient']);
  252.         $client->setCheque($data['chequeClient']);
  253.         $client->setEspece($data['especeClient']);
  254.         $client->setAgencebk($data['agencebkClient']);
  255.         $client->setAgencetn($data['agencetnClient']);
  256.         $client->setAgencetn($data['agencetnClient']);
  257.         $client->setSejourNom($data['sejourNom']);
  258.         // Persistez les entités
  259.         $entityManager->persist($reservation);
  260.         $entityManager->persist($client);
  261.         $entityManager->persist($chambre);
  262.         $entityManager->flush();
  263.         // Répondez avec une confirmation (modifiable en fonction de vos besoins)
  264.         return $this->redirectToRoute('app_home'); // Remplacez 'accueil' par le nom de votre route d'accueil
  265.     }
  266. }