src/Controller/TestfilterController.php line 23

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Hotel;
  4. use App\Form\CombinedSearchType;
  5. use App\Form\HotelfilterType;
  6. use App\Form\SearchHotelType;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Knp\Component\Pager\PaginatorInterface;
  9. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  10. use Symfony\Component\Form\Extension\Core\Type\TextType;
  11. use Symfony\Component\HttpFoundation\JsonResponse;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. class TestfilterController extends AbstractController
  16. {
  17.     /**
  18.      * @Route("/hotel", name="app_testfilter")
  19.      */
  20.     public function index(Request $requestEntityManagerInterface $emPaginatorInterface $paginator): Response
  21.     {
  22.         // $results = [];
  23.         // $form = $this->createForm(SearchHotelType::class);
  24.         // $form->handleRequest($request);
  25.         // $em = $this->getDoctrine()->getManager();
  26.         // $data =   $em->createQueryBuilder()
  27.         //     ->select('c')
  28.         //     ->from('App\Entity\Hotel','c')
  29.         //     ->where('c.etat = 1')
  30.         //     ->getQuery()
  31.         //     ->getResult()
  32.         // ;
  33.         // // Création de la requête de base
  34.         // $qb = $em->createQueryBuilder()
  35.         //     ->select('h')
  36.         //     ->from('App\Entity\Hotel', 'h')
  37.         //     ->join('h.hotelrooms', 'hr')
  38.         //     ->join('h.services', 'hs')
  39.         //     ->join('h.ville', 'v')
  40.         //     ->join('h.hotelprices', 'hp')
  41.         //     ->join('hr.chambre', 'c')
  42.         //     ->join('hr.pricerooms', 'pr')
  43.         //     ->join('h.hotelarrangements', 'ha')
  44.         //     ->join('ha.arrangement', 'a')
  45.         //     ->join('ha.pricearrangements', 'pa')
  46.         //     ->where('h.etat = 1')
  47.         //     ->groupBy('h.id');
  48.         // // Traitement du formulaire
  49.         // if ($form->isSubmitted() && $form->isValid()) {
  50.         //     $data = $form->getData();
  51.         //     $buttonClicked = $request->request->get('name');
  52.         //     $formData = $form->getData();
  53.         //     // Récupération des valeurs du champ "star" du formulaire
  54.         //     $stars = $form->get('star')->getData();
  55.         //     if (!empty($stars)) {
  56.         //         $qb->andWhere('h.star IN (:stars)')
  57.         //             ->setParameter('stars', $stars);
  58.         //     }
  59.         //     // Récupération des valeurs du champ "service" du formulaire
  60.         //     $services = $form->get('service')->getData();
  61.         //     if ($services->count() > 0) {
  62.         //         $serviceIds = [];
  63.         //         foreach ($services as $service) {
  64.         //             $serviceIds[] = $service->getId();
  65.         //         }
  66.         //         $qb->andWhere('hs.id IN (:serviceIds)')
  67.         //             ->setParameter('serviceIds', $serviceIds);
  68.         //     }
  69.         //     // Récupération des valeurs du champ "chambre" du formulaire
  70.         //     $chambres = $form->get('chambre')->getData();
  71.         //     if ($chambres->count() > 0) {
  72.         //         $chambreIds = [];
  73.         //         foreach ($chambres as $chambre) {
  74.         //             $chambreIds[] = $chambre->getId();
  75.         //         }
  76.         //         $qb->andWhere('c.id IN (:chambreIds)')
  77.         //             ->setParameter('chambreIds', $chambreIds);
  78.         //     }
  79.         //     // Récupération des valeurs du champ "chambre" du formulaire
  80.         //     $arrangements = $form->get('arrangement')->getData();
  81.         //     if ($arrangements->count() > 0) {
  82.         //         $arrangementsIds = [];
  83.         //         foreach ($arrangements as $arrangement) {
  84.         //             $arrangementsIds[] = $arrangement->getId();
  85.         //         }
  86.         //         $qb->andWhere('a.id IN (:arrangementsIds)')
  87.         //             ->setParameter('arrangementsIds', $arrangementsIds);
  88.         //     }
  89.         //     // Récupération des valeurs des champs "min" et "max"
  90.         //     $minPrice = $form->get('min')->getData();
  91.         //     $maxPrice = $form->get('max')->getData();
  92.         //     // Ajout d'une condition à la requête pour filtrer la somme des prix dans les relations
  93.         //     if (!empty($minPrice) && !empty($maxPrice)) {
  94.         //         $qb->andWhere('(pr.price + pa.price) >= :minPrice')
  95.         //             ->andWhere('(pr.price + pa.price) <= :maxPrice')
  96.         //             ->setParameter('minPrice', $minPrice)
  97.         //             ->setParameter('maxPrice', $maxPrice);
  98.         //     }
  99.         //     // Récupération des valeurs des champs "min" et "max"
  100.         //     $dated = $form->get('dated')->getData();
  101.         //     $datef = $form->get('datef')->getData();
  102.         //     // Ajout d'une condition à la requête pour filtrer la somme des prix dans les relations
  103.         //     if (!empty($dated) && !empty($datef)) {
  104.         //         $qb->andWhere('hp.dated <= :dated')
  105.         //             ->andWhere('hp.datef >= :datef')
  106.         //             ->setParameter('dated', $dated)
  107.         //             ->setParameter('datef', $datef);
  108.         //     }
  109.         //     $buttonClicked = $request->request->get('clickedButton');
  110.         //     // Si le bouton "Rechercher par ville" a été cliqué
  111.         //     if ($buttonClicked === 'ville') {
  112.         //         // Ajoutez la condition pour la recherche par ville
  113.         //         $ville = $form->get('ville')->getData();
  114.         //         if (!empty($ville)) {
  115.         //             $qb->andWhere('v.name = :ville')->setParameter('ville', $ville);
  116.         //         }
  117.         //     }
  118.         //     foreach ($qb as $hotel) {
  119.         //         // Logique pour chaque hôtel trouvé
  120.         //         $results[] = [
  121.         //             'hotel' => $hotel,
  122.         //             // Autres informations que vous souhaitez afficher
  123.         //         ];
  124.         //     }
  125.         // }
  126.         // // Exécution de la requête et récupération des résultats
  127.         // $hotel = $qb->getQuery()->getResult();
  128.         
  129.         // // Rendu du template avec les résultats de la requête et le formulaire
  130.         // return $this->render('testfilter/index.html.twig', [
  131.         //     'form' => $form->createView(),
  132.         //     'hotel' => $hotel,
  133.         //     'results' => $results,
  134.         //     'data' => $data
  135.         // ]);
  136.         $form $this->createForm(SearchHotelType::class);
  137.         $form->handleRequest($request);
  138.         $qb $em->createQueryBuilder()
  139.             ->select('h')
  140.             ->from('App\Entity\Hotel''h')
  141.             //->join('h.hotelrooms', 'hr')
  142.         ;
  143.         // Traitement du formulaire
  144.         if ($form->isSubmitted() && $form->isValid()) {
  145.             // Récupération des données du formulaire
  146.             $data $form->getData();
  147.             // Récupération des valeurs du champ "star" du formulaire
  148.             $stars $form->get('star')->getData();
  149.             if (!empty($stars)) {
  150.                 $qb->andWhere('h.star IN (:stars)')
  151.                     ->setParameter('stars'$stars);
  152.             }
  153.             // Récupération des valeurs du champ "service" du formulaire
  154.             $services $form->get('service')->getData();
  155.             if ($services->count() > 0) {
  156.                 $serviceIds = [];
  157.                 foreach ($services as $service) {
  158.                     $serviceIds[] = $service->getId();
  159.                 }
  160.                 $qb->join('h.services''hs')
  161.                     ->andWhere('hs.id IN (:serviceIds)')
  162.                     ->setParameter('serviceIds'$serviceIds);
  163.             }
  164.             // Récupération des valeurs du champ "chambre" du formulaire
  165.             $chambres $form->get('chambre')->getData();
  166.             if ($chambres->count() > 0) {
  167.                 $chambreIds = [];
  168.                 foreach ($chambres as $chambre) {
  169.                     $chambreIds[] = $chambre->getId();
  170.                 }
  171.                 $qb->join('h.hotelrooms''hr'// Définition de l'alias hr pour la relation HotelRoom
  172.                 ->join('hr.chambre''c')    // Utilisation de l'alias hr dans la jointure pour la relation Chambre
  173.                 ->andWhere('c.id IN (:chambreIds)')
  174.                     ->setParameter('chambreIds'$chambreIds);
  175.             }
  176.             // Récupération des valeurs du champ "arrangement" du formulaire
  177.             $arrangements $form->get('arrangement')->getData();
  178.             if ($arrangements->count() > 0) {
  179.                 $arrangementIds = [];
  180.                 foreach ($arrangements as $arrangement) {
  181.                     $arrangementIds[] = $arrangement->getId();
  182.                 }
  183.                 $qb->join('h.hotelarrangements''ha')
  184.                     ->join('ha.arrangement''a')
  185.                     ->andWhere('a.id IN (:arrangementIds)')
  186.                     ->setParameter('arrangementIds'$arrangementIds);
  187.             }
  188.             // Récupération des valeurs des champs "min" et "max" pour filtrer les prix
  189.             $minPrice $form->get('min')->getData();
  190.             $maxPrice $form->get('max')->getData();
  191.             if (!empty($minPrice) && !empty($maxPrice)) {
  192.                 $qb->join('h.hotelrooms''hr')
  193.                     ->join('hr.pricerooms''pr')
  194.                     ->join('ha.pricearrangements''pa')
  195.                     ->andWhere('(pr.price + pa.price) >= :minPrice')
  196.                     ->andWhere('(pr.price + pa.price) <= :maxPrice')
  197.                     ->setParameter('minPrice'$minPrice)
  198.                     ->setParameter('maxPrice'$maxPrice);
  199.             }
  200.             // Récupération des valeurs des champs "dated" et "datef"
  201.             $dated $form->get('dated')->getData();
  202.             $datef $form->get('datef')->getData();
  203.             // Ajout d'une condition à la requête pour filtrer les dates dans les relations
  204.             if (!empty($dated) && !empty($datef)) {
  205.                 $qb->join('h.hotelprices''hp')
  206.                     ->andWhere('hp.dated <= :dated')
  207.                     ->andWhere('hp.datef >= :datef')
  208.                     ->setParameter('dated'$dated)
  209.                     ->setParameter('datef'$datef);
  210.             }
  211.             // Si le bouton "Rechercher par ville" a été cliqué
  212.             $buttonClicked $request->request->get('clickedButton');
  213.             if ($buttonClicked === 'ville') {
  214.                 // Ajoutez la condition pour la recherche par ville
  215.                 $ville $form->get('ville')->getData();
  216.                 if (!empty($ville)) {
  217.                     $qb->join('h.ville''v')
  218.                         ->andWhere('v.name = :ville')
  219.                         ->setParameter('ville'$ville);
  220.                 }
  221.             }
  222.         }
  223.         // Exécution de la requête pour obtenir les résultats
  224.         $query $qb->getQuery();
  225.         // Paginer les résultats
  226.         $pagination $paginator->paginate(
  227.             $query// Requête à paginer
  228.             $request->query->getInt('page'1), // Numéro de page par défaut
  229.             // Nombre d'éléments par page
  230.         );
  231.         return $this->render('testfilter/index.html.twig', [
  232.             'form' => $form->createView(),
  233.             'hotels' => $pagination,
  234.         ]);
  235.     }
  236. }