src/Controller/HomeController.php line 54

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Circuit;
  4. use App\Entity\CircuitSearch;
  5. use App\Entity\Croisieres;
  6. use App\Entity\Hotel;
  7. use App\Entity\Hotelprice;
  8. use App\Entity\Sejour;
  9. use App\Entity\Sejoursearch;
  10. use App\Form\CircuitSearchType;
  11. use App\Form\CircuitType;
  12. use App\Form\CroisieresType;
  13. use App\Form\HotelfilterType;
  14. use App\Form\HotelNameFilterType;
  15. use App\Form\HotelsearchType;
  16. use App\Form\SearchCroisiereType;
  17. use App\Form\SearchHotelType;
  18. use App\Form\SearchSejourType;
  19. use App\Form\SearchType;
  20. use App\Entity\Client;
  21. use App\Form\SejoursearchType;
  22. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  23. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  24. use Symfony\Component\Form\FormInterface;
  25. use App\Form\SejourType;
  26. use Knp\Component\Pager\PaginatorInterface;
  27. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  28. use Symfony\Component\Form\Extension\Core\Type\TextType;
  29. use Symfony\Component\HttpFoundation\Request;
  30. use Symfony\Component\HttpFoundation\Response;
  31. use Symfony\Component\Routing\Annotation\Route;
  32. use Symfony\Component\Mailer\MailerInterface;
  33. use Doctrine\ORM\EntityManagerInterface;
  34. use Symfony\Component\Mime\Email;
  35. use Symfony\Component\Mime\Address// Import Address class
  36. use Symfony\Component\HttpClient\HttpClient;
  37. use Symfony\Contracts\HttpClient\HttpClientInterface;
  38. class HomeController extends AbstractController
  39. {
  40.     /**
  41.      * @Route("/home", name="app_home")
  42.      */
  43.     public function index(Request $request): Response
  44.     {
  45.         $em $this->getDoctrine()->getManager();
  46.         $banniere =   $em->createQueryBuilder()
  47.             ->select('b')
  48.             ->from('App\Entity\Banniere','b')
  49.             ->where('b.etat = 1')
  50.             ->getQuery()
  51.             ->getResult()
  52.         ;
  53.         $sejour =   $em->createQueryBuilder()
  54.             ->select('s')
  55.             ->from('App\Entity\Sejour','s')
  56.             ->where('s.etat = 1')
  57.             ->Andwhere('s.latest = 1')
  58.             ->getQuery()
  59.             ->getResult()
  60.         ;
  61.         $circuit =   $em->createQueryBuilder()
  62.             ->select('c')
  63.             ->from('App\Entity\Circuit','c')
  64.             ->where('c.etat = 1')
  65.             ->getQuery()
  66.             ->getResult()
  67.         ;
  68.         $croisiere =   $em->createQueryBuilder()
  69.             ->select('c')
  70.             ->from('App\Entity\Croisiere','c')
  71.             ->where('c.etat = 1')
  72.             ->getQuery()
  73.             ->getResult()
  74.         ;
  75.         $hotel =   $em->createQueryBuilder()
  76.             ->select('h')
  77.             ->from('App\Entity\Hotel','h')
  78.             ->where('h.etat = 1')
  79.             ->getQuery()
  80.             ->getResult()
  81.         ;
  82.         $results = [];
  83.         $hotelform $this->createForm(SearchType::class, null, ['data_class' => null])->handleRequest($request);
  84.         if ($hotelform->isSubmitted() && $hotelform->isValid()) {
  85.             $data $hotelform->getData();
  86.             // Logique de recherche pour récupérer les hôtels disponibles
  87.             $availableHotels $em->createQueryBuilder('h')
  88.                 ->select('h')
  89.                 ->from('App\Entity\Hotel''h')
  90.                 ->leftJoin('h.hotelprices''hp')
  91.                 ->leftJoin('hp.pricerooms''pr')
  92.                 ->leftJoin('h.hotelrooms''ac')
  93.                 ->leftJoin('h.ville','v')
  94.                 // Ajustez ici la jointure avec la propriété correcte de l'entité Hotel
  95.                 ->where('h.etat = 1')
  96.                 ->where('v.name = :ville')
  97.                 ->andWhere('hp.dated <= :dateDepart')
  98.                 ->andWhere('hp.datef >= :dateArrive')
  99.                 // Ajoutez d'autres conditions selon vos besoins
  100.                 ->setParameter('dateDepart'$data['dateDepart'])
  101.                 ->setParameter('dateArrive'$data['dateArrive'])
  102.                 ->setParameter('ville'$data['ville'])
  103.                 // Ajoutez d'autres paramètres selon vos besoins
  104.                 ->getQuery()
  105.                 ->getResult();
  106.             foreach ($availableHotels as $hotels) {
  107.                 // Logique pour chaque hôtel trouvé
  108.                 $results[] = [
  109.                     'hotel' => $hotels,
  110.                     // Autres informations que vous souhaitez afficher
  111.                 ];
  112.             }
  113.             return $this->render('home/resultat_page.html.twig', [
  114.                 'hotels' => $hotels,
  115.                 'form' => $hotelform->createView(),
  116.                 'results' => $results,
  117.             ]);
  118.         }
  119.         return $this->render('home/index.html.twig', [
  120.             'sejour' => $sejour,
  121.             'banniere' => $banniere,
  122.             'hotel' => $hotel,
  123.             'circuit' => $circuit,
  124.             'croisiere' => $croisiere,
  125.             'form' => $hotelform->createView(),
  126.         ]);
  127.     }
  128.     private $httpClient;
  129.     public function __construct(HttpClientInterface $httpClient)
  130.     {
  131.         $this->httpClient $httpClient;
  132.     }
  133.     /**
  134.      * @Route("/", name="app_list")
  135.      */
  136.     public function home(Request $request): Response
  137.     {
  138.         $today = new \DateTime();
  139.         // Date de check-in (par défaut aujourd'hui)
  140.         $checkIn $request->query->get('checkIn'$today->format('Y-m-d'));
  141.         // Date de check-out (par défaut aujourd'hui + 1 jour)
  142.         $checkOut $request->query->get('checkOut'$today->modify('+1 day')->format('Y-m-d'));
  143.         $city $request->get('city''');
  144.         $tag $request->get('tag''');
  145.         $rooms $request->query->get('rooms', []);
  146.         if (empty($rooms)) {
  147.             $rooms = [
  148.                 [
  149.                     "Adult" => 2,
  150.                 ]
  151.             ];
  152.         }
  153.         $apiUrl 'https://admin.tunisiabeds.tn/Postman/postman.php?url=HotelSearch&request=' urlencode(json_encode([
  154.                 "Credential" => [
  155.                     "Login" => "XMLRUSTICA",
  156.                     "Password" => "Q-VCaJaqrEDnTYjTbncD"
  157.                 ],
  158.                 "SearchDetails" => [
  159.                     "BookingDetails" => [
  160.                         "CheckIn" => $checkIn,
  161.                         "CheckOut" => $checkOut,
  162.                         "City" => $city
  163.                     ],
  164.                     "Rooms" => $rooms
  165.                 ]
  166.             ]));
  167.         $httpClient HttpClient::create();
  168.         $response $httpClient->request('GET'$apiUrl);
  169.         $search $response->getContent();
  170.         // Liste des id des villes disponibles
  171.         $cities = [
  172.             10 =>"Hammamet",
  173.             11 =>"Nabeul",
  174.             12 =>"Kelibia",
  175.             13 =>"Korba",
  176.             14 =>"Korbous",
  177.             17 =>"Kairouan",
  178.             18 =>"Djerba",
  179.             19 =>"Zarzis",
  180.             20 =>"Douz",
  181.             22 =>"Kebili",
  182.             23 =>"Ksar Ghilane",
  183.             30 =>"Tunis",
  184.             31 =>"Ain Drahem",
  185.             33 =>"Tabarka",
  186.             34 =>"Sousse",
  187.             35 =>"Mahdia",
  188.             37 =>"Monastir",
  189.             39 =>"Sfax",
  190.             44 =>"Djerba-Midoun",
  191.             47 =>"Tozeur",
  192.             48 =>"Bizerte",
  193.             49 =>"Le Kef",
  194.             54 =>"Gafsa",
  195.             55 =>"Gabes",
  196.             59 =>"Zaghouan",
  197.             70 =>"Tataouine",
  198.             71 =>"Téboursouk",
  199.             72 =>"Sbeitla",
  200.             73 =>"Matmata",
  201.             74 =>"Sidi Bouzid",
  202.             75 =>"Nefta",
  203.             76 =>"Mednenine",
  204.             77 =>"Beja",
  205.             78 =>"El Jem",
  206.             79 =>"Gammarth"
  207.         ];
  208.         // Liste des id des themes
  209.         $tags = [
  210.             =>"Last minute",
  211.             =>"All inclusive",
  212.             =>"Famille",
  213.             =>"Centre de Thalasso",
  214.             =>"Petit Prix",
  215.             =>"Mini Club",
  216.             =>"Romance",
  217.             10 =>"Luxe",
  218.             14 =>"Affaires",
  219.             15 =>"Sport & Loisir",
  220.             16 =>"Club",
  221.             17 =>"Nature et Aventure",
  222.             19 =>"Bord de Mer"
  223.         ];
  224.         $em $this->getDoctrine()->getManager();
  225.         $banniere =   $em->createQueryBuilder()
  226.             ->select('b')
  227.             ->from('App\Entity\Banniere','b')
  228.             ->where('b.etat = 1')
  229.             ->getQuery()
  230.             ->getResult()
  231.         ;
  232.         $sejour =   $em->createQueryBuilder()
  233.             ->select('s')
  234.             ->from('App\Entity\Sejour','s')
  235.             ->where('s.etat = 1')
  236.             ->Andwhere('s.latest = 1')
  237.             ->getQuery()
  238.             ->getResult()
  239.         ;
  240.         $circuit =   $em->createQueryBuilder()
  241.             ->select('c')
  242.             ->from('App\Entity\Circuit','c')
  243.             ->where('c.etat = 1')
  244.             ->getQuery()
  245.             ->getResult()
  246.         ;
  247.         $croisiere =   $em->createQueryBuilder()
  248.             ->select('c')
  249.             ->from('App\Entity\Croisiere','c')
  250.             ->where('c.etat = 1')
  251.             ->getQuery()
  252.             ->getResult()
  253.         ;
  254.         //listhotel debut
  255.         if (empty($rooms)) {
  256.             $rooms = [
  257.                 [
  258.                     "Adult" => 2
  259.                 ]
  260.             ];
  261.         }
  262.         $apiUrl 'https://admin.tunisiabeds.tn/Postman/postman.php?url=HotelSearch&request=' urlencode(json_encode([
  263.                 "Credential" => [
  264.                     "Login" => "XMLRUSTICA",
  265.                     "Password" => "Q-VCaJaqrEDnTYjTbncD"
  266.                 ],
  267.                 "SearchDetails" => [
  268.                     "BookingDetails" => [
  269.                         "CheckIn" => $checkIn,
  270.                         "CheckOut" => $checkOut,
  271.                         "Hotel" => [311,52,599,488]
  272.                     ],
  273.                     "Rooms" => $rooms
  274.                 ]
  275.             ]));
  276.         $httpClient HttpClient::create();
  277.         $response $httpClient->request('GET'$apiUrl);
  278.         $test $response->getContent();
  279.         try {
  280.             // Effectuer la requête GET à l'API
  281.             $response $this->httpClient->request('GET'$apiUrl);
  282.             // Vérifier le code de réponse
  283.             if ($response->getStatusCode() === 200) {
  284.                 // Récupérer le contenu de la réponse
  285.                 $content $response->getContent();
  286.                 // Passe le contenu directement à la vue Twig
  287.                 return $this->render('home/home.html.twig', [
  288.                     'content' => $content,
  289.                     'test' => $test,
  290.                     'search' => $search,
  291.                     'checkIn' => $checkIn,
  292.                     'checkOut' => $checkOut,
  293.                     'city' => $city,
  294.                     'rooms' => $rooms,
  295.                     'cities' => $cities,
  296.                     'croisiere' => $croisiere,
  297.                     'sejour' => $sejour,
  298.                     'banniere' => $banniere,
  299.                 ]);
  300.             } else {
  301.                 throw new \Exception('Erreur lors de la requête à l\'API. Code de statut : ' $response->getStatusCode());
  302.             }
  303.         } catch (\Exception $e) {
  304.             // Gérer les erreurs de requête ou de traitement
  305.             return $this->render('error.html.twig', [
  306.                 'message' => 'Une erreur est survenue : ' $e->getMessage(),
  307.             ]);
  308.         }
  309.     }
  310.     /**
  311.      * @Route("/list-search/{city}", name="list_search")
  312.      */
  313.     public function listSearch($city,Request $request): Response
  314.     {
  315.         $today = new \DateTime();
  316.         // Date de check-in (par défaut aujourd'hui)
  317.         $checkIn $request->query->get('checkIn'$today->format('Y-m-d'));
  318.         // Date de check-out (par défaut aujourd'hui + 1 jour)
  319.         $checkOut $request->query->get('checkOut'$today->modify('+1 day')->format('Y-m-d'));
  320.         $city $request->get('city''');
  321.         $tag $request->get('tag''');
  322.         $rooms $request->query->get('rooms', []);
  323.         if (empty($rooms)) {
  324.             $rooms = [
  325.                 [
  326.                     "Adult" => 2,
  327.                 ]
  328.             ];
  329.         }
  330.         $apiUrl 'https://admin.tunisiabeds.tn/Postman/postman.php?url=HotelSearch&request=' urlencode(json_encode([
  331.                 "Credential" => [
  332.                     "Login" => "XMLRUSTICA",
  333.                     "Password" => "Q-VCaJaqrEDnTYjTbncD"
  334.                 ],
  335.                 "SearchDetails" => [
  336.                     "BookingDetails" => [
  337.                         "CheckIn" => $checkIn,
  338.                         "CheckOut" => $checkOut,
  339.                         "City" => $city
  340.                     ],
  341.                     "Filters" => [
  342.                         "Keywords" => "",
  343.                         "Category" => [],
  344.                         "OnlyAvailable" => false,
  345.                         "Tags" => $tag
  346.                     ],
  347.                     "Rooms" => $rooms
  348.                 ]
  349.             ]));
  350.         $httpClient HttpClient::create();
  351.         $response $httpClient->request('GET'$apiUrl);
  352.         $content $response->getContent();
  353.         // Liste des id des villes disponibles
  354.         $cities = [
  355.             10 =>"Hammamet",
  356.             11 =>"Nabeul",
  357.             12 =>"Kelibia",
  358.             13 =>"Korba",
  359.             14 =>"Korbous",
  360.             17 =>"Kairouan",
  361.             18 =>"Djerba",
  362.             19 =>"Zarzis",
  363.             20 =>"Douz",
  364.             22 =>"Kebili",
  365.             23 =>"Ksar Ghilane",
  366.             30 =>"Tunis",
  367.             31 =>"Ain Drahem",
  368.             33 =>"Tabarka",
  369.             34 =>"Sousse",
  370.             35 =>"Mahdia",
  371.             37 =>"Monastir",
  372.             39 =>"Sfax",
  373.             44 =>"Djerba-Midoun",
  374.             47 =>"Tozeur",
  375.             48 =>"Bizerte",
  376.             49 =>"Le Kef",
  377.             54 =>"Gafsa",
  378.             55 =>"Gabes",
  379.             59 =>"Zaghouan",
  380.             70 =>"Tataouine",
  381.             71 =>"Téboursouk",
  382.             72 =>"Sbeitla",
  383.             73 =>"Matmata",
  384.             74 =>"Sidi Bouzid",
  385.             75 =>"Nefta",
  386.             76 =>"Mednenine",
  387.             77 =>"Beja",
  388.             78 =>"El Jem",
  389.             79 =>"Gammarth"
  390.         ];
  391.         // Liste des id des themes
  392.         $tags = [
  393.             =>"Last minute",
  394.             =>"All inclusive",
  395.             =>"Famille",
  396.             =>"Centre de Thalasso",
  397.             =>"Petit Prix",
  398.             =>"Mini Club",
  399.             =>"Romance",
  400.             10 =>"Luxe",
  401.             14 =>"Affaires",
  402.             15 =>"Sport & Loisir",
  403.             16 =>"Club",
  404.             17 =>"Nature et Aventure",
  405.             19 =>"Bord de Mer"
  406.         ];
  407.         // Passe le contenu directement à la vue Twig
  408.         return $this->render('home/list_search.html.twig', [
  409.             'content' => $content,
  410.             'checkIn' => $checkIn,
  411.             'checkOut' => $checkOut,
  412.             'rooms' => $rooms,
  413.             'city' => $city,
  414.             'cities' => $cities,
  415.             'tag' => $tag,
  416.             'tags' => $tags,
  417.         ]);
  418.     }
  419.     /**
  420.      * @Route("/detail-search/{city}/{id}", name="detail_search")
  421.      */
  422.     public function detailSearch($city,$id,Request $request): Response
  423.     {
  424.         $today = new \DateTime();
  425.         // Date de check-in (par défaut aujourd'hui)
  426.         $checkIn $request->query->get('checkIn'$today->format('Y-m-d'));
  427.         // Date de check-out (par défaut aujourd'hui + 1 jour)
  428.         $checkOut $request->query->get('checkOut'$today->modify('+1 day')->format('Y-m-d'));
  429.         $city $request->get('city''');
  430.         $rooms $request->query->get('rooms', []);
  431.         if (empty($rooms)) {
  432.             $rooms = [
  433.                 [
  434.                     "Adult" => 2
  435.                 ]
  436.             ];
  437.         }
  438.         $apiUrl 'https://admin.tunisiabeds.tn/Postman/postman.php?url=HotelSearch&request=' urlencode(json_encode([
  439.                 "Credential" => [
  440.                     "Login" => "XMLRUSTICA",
  441.                     "Password" => "Q-VCaJaqrEDnTYjTbncD"
  442.                 ],
  443.                 "SearchDetails" => [
  444.                     "BookingDetails" => [
  445.                         "CheckIn" => $checkIn,
  446.                         "CheckOut" => $checkOut,
  447.                         "City" => $city,
  448.                         "Hotel" => $id
  449.                     ],
  450.                     "Rooms" => $rooms
  451.                 ]
  452.             ]));
  453.         $httpClient HttpClient::create();
  454.         $response $httpClient->request('GET'$apiUrl);
  455.         $content $response->getContent();
  456.         //test controlleur
  457.         if (empty($rooms)) {
  458.             $rooms = [
  459.                 [
  460.                     "Adult" => 2,
  461.                     "Child" => [" "]
  462.                 ]
  463.             ];
  464.         }
  465.         $testUrl 'https://admin.tunisiabeds.tn/Postman/postman.php?url=HotelSearch&request=' urlencode(json_encode([
  466.                 "Credential" => [
  467.                     "Login" => "XMLRUSTICA",
  468.                     "Password" => "Q-VCaJaqrEDnTYjTbncD"
  469.                 ],
  470.                 "SearchDetails" => [
  471.                     "BookingDetails" => [
  472.                         "CheckIn" => $checkIn,
  473.                         "CheckOut" => $checkOut,
  474.                         "City" => $city
  475.                     ],
  476.                     "Filters" => [
  477.                         "Keywords" => "",
  478.                         "Category" => [],
  479.                         "OnlyAvailable" => false,
  480.                         "Tags" => ["Nature et Aventure"]
  481.                     ],
  482.                     "Rooms" => $rooms
  483.                 ]
  484.             ]));
  485.         $httpClient HttpClient::create();
  486.         $response $httpClient->request('GET'$testUrl);
  487.         $test $response->getContent();
  488.         // Liste des id des villes disponibles
  489.         $cities = [
  490.             10 =>"Hammamet",
  491.             11 =>"Nabeul",
  492.             12 =>"Kelibia",
  493.             13 =>"Korba",
  494.             14 =>"Korbous",
  495.             17 =>"Kairouan",
  496.             18 =>"Djerba",
  497.             19 =>"Zarzis",
  498.             20 =>"Douz",
  499.             22 =>"Kebili",
  500.             23 =>"Ksar Ghilane",
  501.             30 =>"Tunis",
  502.             31 =>"Ain Drahem",
  503.             33 =>"Tabarka",
  504.             34 =>"Sousse",
  505.             35 =>"Mahdia",
  506.             37 =>"Monastir",
  507.             39 =>"Sfax",
  508.             44 =>"Djerba-Midoun",
  509.             47 =>"Tozeur",
  510.             48 =>"Bizerte",
  511.             49 =>"Le Kef",
  512.             54 =>"Gafsa",
  513.             55 =>"Gabes",
  514.             59 =>"Zaghouan",
  515.             70 =>"Tataouine",
  516.             71 =>"Téboursouk",
  517.             72 =>"Sbeitla",
  518.             73 =>"Matmata",
  519.             74 =>"Sidi Bouzid",
  520.             75 =>"Nefta",
  521.             76 =>"Mednenine",
  522.             77 =>"Beja",
  523.             78 =>"El Jem",
  524.             79 =>"Gammarth"
  525.         ];
  526.         //test fin
  527.         //Hotel Détail
  528.         // URL de l'API pour obtenir les détails de l'hôtel avec l'identifiant $id
  529.         $detailUrl 'https://admin.tunisiabeds.tn/Postman/postman.php?url=HotelDetail&request={%0A%20%20%22Credential%22%3A%20{%0A%20%20%20%20%22Login%22%3A%20%22XMLRUSTICA%22%2C%0A%20%20%20%20%22Password%22%3A%20%22Q-VCaJaqrEDnTYjTbncD%22%0A%20%20}%2C%0A%20%20%22Hotel%22%3A'.$id.'%0A}';
  530.         // Récupérer les détails de l'hôtel depuis l'API
  531.         $httpClient HttpClient::create();
  532.         $response $httpClient->request('GET'$detailUrl);
  533.         $detail $response->getContent();
  534.         // Passe le contenu directement à la vue Twig
  535.         return $this->render('home/detail_search.html.twig', [
  536.             'content' => $content,
  537.             'detail' => $detail,
  538.             'test' => $test,
  539.             'checkIn' => $checkIn,
  540.             'checkOut' => $checkOut,
  541.             'rooms' => $rooms,
  542.             'hotelId' => $id,
  543.             'cityId' => $city,
  544.             'cities' => $cities,
  545.         ]);
  546.     }
  547.     /**
  548.      * @Route("/validation/{id}", name="validation")
  549.      */
  550.     public function validation($id,Request $request): Response
  551.     {
  552.         // Récupérer les paramètres depuis la requête
  553.         $hotelName $request->query->get('hotelName');
  554.         $hotelCity $request->query->get('hotelCity');
  555.         $hotelImage $request->query->get('hotelImage');
  556.         $checkinDate $request->query->get('checkin');
  557.         $checkoutDate $request->query->get('checkout');
  558.         $total $request->query->get('total');
  559.         $boarding $request->query->get('boarding');
  560.         $roomDetails json_decode($request->query->get('rooms'), true);
  561.         $coordonnees = new Client();
  562.         $form $this->createForm('App\Form\ClientType'$coordonnees);
  563.         $form->handleRequest($request);
  564.         if ($form->isSubmitted() && $form->isValid()) {
  565.             // Si le formulaire est soumis et valide, faites quelque chose avec les données du formulaire
  566.             // Par exemple, persistez les données dans la base de données
  567.             $nomClient $coordonnees->getNom();
  568.             $prenomClient $coordonnees->getPrenom();
  569.             $mobileClient $coordonnees->getMobile();
  570.             $messageClient $coordonnees->getMessage();
  571.             $especeClient $coordonnees->isEspece();
  572.             $chequeClient $coordonnees->isCheque();
  573.             $agencebkClient $coordonnees->isAgencebk();
  574.             $agencetnClient $coordonnees->isAgencetn();
  575.             $entityManager $this->getDoctrine()->getManager();
  576.             $entityManager->persist($coordonnees);
  577.             $entityManager->flush();
  578.         }
  579.         //$roomNames = $request->query->get('rooms');
  580.         return $this->render('home/reservation.html.twig', [
  581.             'hotel_id' => $id,
  582.             'checkin_date' => $checkinDate,
  583.             'checkout_date' => $checkoutDate,
  584.             'total' => $total,
  585.             'boarding' => $boarding,
  586.             'room_details' => $roomDetails,
  587.             'hotelName' => $hotelName,
  588.             'hotelCity' => $hotelCity,
  589.             'hotelImage' => $hotelImage,
  590.             'form' => $form->createView(),
  591.             'coordonnees' => $coordonnees,
  592.             //'room_names' => explode(',', $roomNames) // Convertir en tableau
  593.         ]);
  594.     }
  595.     /**
  596.      * @Route("/envoyer-hotels", name="envoyer_hotels", methods={"POST"})
  597.      */
  598.     public function envoyerEmails(Request $requestMailerInterface $mailerEntityManagerInterface $entityManager)
  599.     {
  600.         // Récupérez les données JSON envoyées depuis le frontend
  601.         $data json_decode($request->getContent(), true);
  602.         // Récupérez l'adresse e-mail du client à partir des données du formulaire
  603.         $emailClient $data['emailClient'];
  604.         $message = (new Email())
  605.         ->from(new Address('reservation@rusticavoyages.com''Rustica Voyages'))
  606.         ->to($emailClient)
  607.         ->subject('Récapitulatif des chambres sélectionnées')
  608.         ->html($this->renderView('home/reservation_details.html.twig', [
  609.             'emailData' => $data,
  610.             'nomClient' => $data['nomClient'], // Ajoutez le nom du client
  611.             'prenomClient' => $data['prenomClient'], // Ajoutez le prénom du client
  612.         ]));
  613.         // Envoyez l'email
  614.     $mailer->send($message);
  615.     
  616.         // Construisez le contenu de l'email
  617.         $message = (new Email())
  618.         ->from(new Address('reservation@rusticavoyages.com''Rustica Voyages'))
  619.         ->to('reservation@rusticavoyages.com')
  620.             
  621.             ->subject('Récapitulatif des chambres sélectionnées')
  622.             ->html($this->renderView('home/reservation_agence.html.twig', [
  623.                 'emailData' => $data,
  624.                 'boarding' => $data['boarding'],
  625.                 'roomDetails' => $data['roomDetails'], // Ajoutez les détails des chambres
  626.                 'total' => $data['total'],
  627.                 'nomClient' => $data['nomClient'], // Ajoutez le nom du client
  628.                 'prenomClient' => $data['prenomClient'], // Ajoutez le nom du client
  629.                 'emailClient' => $data['emailClient'], // Ajoutez le nom du client
  630.                 'mobileClient' => $data['mobileClient'], // Ajoutez le mobile du client
  631.                 'messageClient' => $data['messageClient'], // Ajoutez le message du client
  632.                 'especeClient' => $data['especeClient'],
  633.                 'chequeClient' => $data['chequeClient'],
  634.                 'agencebkClient' => $data['agencebkClient'],
  635.                 'agencetnClient' => $data['agencetnClient'],
  636.             ]));
  637.            
  638.         // Envoyez l'email
  639.         $mailer->send($message);
  640.         // Construisez le contenu de l'email
  641.     
  642.     // // Envoyez l'email
  643.     // $mailer->send($message);
  644.         
  645.         // Répondez avec une confirmation (modifiable en fonction de vos besoins)
  646.         return $this->redirectToRoute('app_list'); // Remplacez 'accueil' par le nom de votre route d'accueil
  647.     }
  648.     /**
  649.      * @Route("/hotel-results/{city}", name="hotel_results")
  650.      */
  651.     public function showResults($cityRequest $request): Response
  652.     {
  653.         $today = new \DateTime();
  654.         // Date de check-in (par défaut aujourd'hui)
  655.         $checkIn $request->query->get('checkIn'$today->format('Y-m-d'));
  656.         // Date de check-out (par défaut aujourd'hui + 1 jour)
  657.         $checkOut $request->query->get('checkOut'$today->modify('+1 day')->format('Y-m-d'));
  658.         $city $request->get('city''');
  659.         $tag $request->get('tag''');
  660.         $rooms $request->query->get('rooms', []);
  661.         if (empty($rooms)) {
  662.             $rooms = [
  663.                 [
  664.                     "Adult" => 2,
  665.                 ]
  666.             ];
  667.         }
  668.         $apiUrl 'https://admin.tunisiabeds.tn/Postman/postman.php?url=HotelSearch&request=' urlencode(json_encode([
  669.                 "Credential" => [
  670.                     "Login" => "XMLRUSTICA",
  671.                     "Password" => "Q-VCaJaqrEDnTYjTbncD"
  672.                 ],
  673.                 "SearchDetails" => [
  674.                     "BookingDetails" => [
  675.                         "CheckIn" => $checkIn,
  676.                         "CheckOut" => $checkOut,
  677.                         "City" => $city
  678.                     ],
  679.                     "Filters" => [
  680.                         "Keywords" => "",
  681.                         "Category" => [],
  682.                         "OnlyAvailable" => false,
  683.                         "Tags" => $tag
  684.                     ],
  685.                     "Rooms" => $rooms
  686.                 ]
  687.             ]));
  688.         $httpClient HttpClient::create();
  689.         $response $httpClient->request('GET'$apiUrl);
  690.         $content $response->getContent();
  691.         // Liste des id des villes disponibles
  692.         $cities = [
  693.             10 =>"Hammamet",
  694.             11 =>"Nabeul",
  695.             12 =>"Kelibia",
  696.             13 =>"Korba",
  697.             14 =>"Korbous",
  698.             17 =>"Kairouan",
  699.             18 =>"Djerba",
  700.             19 =>"Zarzis",
  701.             20 =>"Douz",
  702.             22 =>"Kebili",
  703.             23 =>"Ksar Ghilane",
  704.             30 =>"Tunis",
  705.             31 =>"Ain Drahem",
  706.             33 =>"Tabarka",
  707.             34 =>"Sousse",
  708.             35 =>"Mahdia",
  709.             37 =>"Monastir",
  710.             39 =>"Sfax",
  711.             44 =>"Djerba-Midoun",
  712.             47 =>"Tozeur",
  713.             48 =>"Bizerte",
  714.             49 =>"Le Kef",
  715.             54 =>"Gafsa",
  716.             55 =>"Gabes",
  717.             59 =>"Zaghouan",
  718.             70 =>"Tataouine",
  719.             71 =>"Téboursouk",
  720.             72 =>"Sbeitla",
  721.             73 =>"Matmata",
  722.             74 =>"Sidi Bouzid",
  723.             75 =>"Nefta",
  724.             76 =>"Mednenine",
  725.             77 =>"Beja",
  726.             78 =>"El Jem",
  727.             79 =>"Gammarth"
  728.         ];
  729.         // Liste des id des themes
  730.         $tags = [
  731.             =>"Last minute",
  732.             =>"All inclusive",
  733.             =>"Famille",
  734.             =>"Centre de Thalasso",
  735.             =>"Petit Prix",
  736.             =>"Mini Club",
  737.             =>"Romance",
  738.             10 =>"Luxe",
  739.             14 =>"Affaires",
  740.             15 =>"Sport & Loisir",
  741.             16 =>"Club",
  742.             17 =>"Nature et Aventure",
  743.             19 =>"Bord de Mer"
  744.         ];
  745.         // Passe le contenu directement à la vue Twig
  746.         return $this->render('home/hotel_results.html.twig', [
  747.             'content' => $content,
  748.             'checkIn' => $checkIn,
  749.             'checkOut' => $checkOut,
  750.             'rooms' => $rooms,
  751.             'city' => $city,
  752.             'cities' => $cities,
  753.             'tag' => $tag,
  754.             'tags' => $tags,
  755.         ]);
  756.     }
  757.     
  758. }