src/Controller/ProductController.php line 136

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\Request;
  5. use Symfony\Component\HttpFoundation\JsonResponse;
  6. use Symfony\Component\HttpFoundation\Response;
  7. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use Symfony\Component\Routing\Annotation\Route;
  10. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  11. use Symfony\Component\HttpFoundation\Cookie;
  12. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  13. use GuzzleHttp\Client;
  14. use App\Entity\commande;
  15. use App\Entity\Transaction;
  16. use App\Entity\Typologie;
  17. use App\Entity\Residence;
  18. use App\Entity\mediaResidence;
  19. use App\Entity\Language;
  20. use App\Entity\InfosResidence;
  21. use App\Entity\Package;
  22. use App\Entity\InfosFormuleBase;
  23. use App\Entity\InfosDiscover;
  24. use App\Entity\InfosDiscoverLink;
  25. use App\Entity\InfosEvent;
  26. use App\Repository\TransactionRepository;
  27. use App\Utils\Residences;
  28. use App\Utils\IresaManager;
  29. use App\Utils\UpdateTraductions;
  30. use App\Services\ToolService;
  31. use App\Services\TravellerService;
  32. use App\Services\SeasonService;
  33. /**
  34.  * @Route("/{_locale}", requirements={"_locale": "en|fr"})
  35.  */
  36. class ProductController extends AbstractController
  37. {
  38.     /**
  39.      * @var EntityManagerInterface
  40.      */
  41.     private $em;
  42.     
  43.      /**
  44.      * @var SessionInterface
  45.      */
  46.     private $session;
  47.     private $flashbag;
  48.     private $user;
  49.     private $seasonService;
  50.     private $residenceService;
  51.     private $iresaManager;
  52.     private $toolService;
  53.     private $updateTraductions;
  54.     private $travellerService;
  55.     function __construct(EntityManagerInterface $em,  SessionInterface $sessionSeasonService $seasonServiceResidences $residenceServiceIresaManager $iresaManagerToolService $toolServiceUpdateTraductions $updateTraductionsTravellerService $travellerService) {
  56.         $this->em $em;
  57.         $session $session;
  58.         $this->flashbag $session->getFlashBag();
  59.         
  60.         $this->seasonService $seasonService;
  61.         $this->residenceService $residenceService;
  62.         $this->iresaManager $iresaManager;
  63.         $this->toolService $toolService;
  64.         $this->updateTraductions $updateTraductions;
  65.         $this->travellerService $travellerService;
  66.     }
  67.     /**
  68.      * @Route("/produit/{slug}/{id}", name="ac_platform_produit")
  69.      */
  70.     public function produit(Request $request$slug$id
  71.     {
  72.         $session $request->getSession();
  73.         $message = [];
  74.         $themes null;
  75.         $prestationDefault null;
  76.         $listDurees = [];
  77.         $listDatesDebut = [];
  78.         $services null;
  79.         $selectedFormule 0;
  80.         $selectedHebergement null;
  81.         $packages = [];
  82.         $locale $request->getLocale();
  83.         if ($session->has('formule')) {
  84.             $message[] = "Formule en session";
  85.             $selectedFormule $session->get('formule');
  86.         }
  87.         $lang  $this->em->getRepository(Language::class)->findOneByCode($locale);
  88.         $lang_default  $this->em->getRepository(Language::class)->findOneByCode('fr');
  89.         
  90.         /* Instanciation des services */
  91.         
  92.         
  93.         $season $this->seasonService->getSeason();
  94.         $this->residenceService->setLocale($locale);
  95.         
  96.         $comm_status true;
  97.         if($id != $this->travellerService->travellers['idResidence'] || $session == "renew") {
  98.             $this->travellerService->init();
  99.             $this->travellerService->travellers['idResidence'] = $id;
  100.             $session->remove('idPrestation');
  101.             $session->remove('idPresta');
  102.             $session->remove('hebergement');
  103.             $session->remove('formule');
  104.             $session->remove('resas');
  105.             $session->remove('comment');
  106.             $session->remove('tarifs');
  107.             $session->remove('codepromo');
  108.             $session->remove('idPack');
  109.             $session->remove('idtyposelected');
  110.             $session->remove('residence');
  111.         }
  112.         
  113.         $session->set('residence' , ['slug' => $slug'id' => $id]);
  114.         $residence =  $this->em->getRepository(Residence::class)->findOneBy(['idiresa' => $id]);
  115.         if(!$residence) {
  116.             throw $this->createNotFoundException('RĂ©sidence inexistante');
  117.         }
  118.         $residence_id $residence->getId();
  119.         $params_default = [
  120.             'lang' => $lang_default,
  121.             'residence' => $residence
  122.         ];
  123.         $params_trad = [
  124.             'lang' => $lang,
  125.             'residence' => $residence
  126.         ];
  127.         $breadCrumb $this->residenceService->getBreadcrumb($residence);
  128.         
  129.         $infosResidence $this->em->getRepository(InfosResidence::class)->findOneBy($params_trad);
  130.         if(!$infosResidence) {
  131.             $infosResidence $this->em->getRepository(InfosResidence::class)->findOneBy($params_default);
  132.         }
  133.         $formules $this->em->getRepository(Package::class)->findOnPageBy($params_trad);
  134.         if(!$formules) {
  135.             $formules $this->em->getRepository(Package::class)->findOnPageBy($params_default);
  136.         }
  137.         
  138.         $formuleBase $this->em->getRepository(InfosFormuleBase::class)->findOneBy($params_trad);
  139.         if(!$formuleBase) {
  140.             $formuleBase $this->em->getRepository(InfosFormuleBase::class)->findOneBy($params_default);
  141.         }
  142.         
  143.         $formules array_merge([$formuleBase], $formules);
  144.         $typologies $this->em->getRepository(Typologie::class)->findOnPageBy($params_trad);
  145.         if(!$typologies) {
  146.             $typologies $this->em->getRepository(Typologie::class)->findOnPageBy($params_default);
  147.         }
  148.         
  149.         $listDiscover $this->em->getRepository(InfosDiscover::class)->findBy($params_trad);
  150.         if(!$listDiscover) {
  151.             $listDiscover $this->em->getRepository(InfosDiscover::class)->findBy($params_default);
  152.         }
  153.         $listDiscoverLink $this->em->getRepository(InfosDiscoverLink::class)->findBy($params_trad);
  154.         if(!$listDiscoverLink) {
  155.             $listDiscoverLink $this->em->getRepository(InfosDiscoverLink::class)->findBy($params_default);
  156.         }
  157.         $listEvent $this->em->getRepository(InfosEvent::class)->findBy($params_trad);
  158.         if(!$listEvent) {
  159.             $listEvent $this->em->getRepository(InfosEvent::class)->findBy($params_default);
  160.         }
  161.         $slidesHeaderDefault $this->em->getRepository(mediaResidence::class)->findByLocation($residence_id"header"$lang_default$season);
  162.         $slidesContentDefault $this->em->getRepository(mediaResidence::class)->findByLocation($residence_id"content"$lang_default$season);
  163.         $slidesHeader $this->em->getRepository(mediaResidence::class)->findByLocation($residence_id"header"$lang$season);
  164.         if(is_null($slidesHeader)) {
  165.             $slidesHeader $slidesHeaderDefault;
  166.         }
  167.         $slidesContent $this->em->getRepository(mediaResidence::class)->findByLocation($residence_id"content"$lang$season);
  168.         if(is_null($slidesContent)) {
  169.             $slidesContent $slidesContentDefault;
  170.         }
  171.         
  172.         /* on rĂ©cupère les paramètres de recherche s'il y en a */
  173.         
  174.         /*
  175.          * par dĂ©faut on teste les dispos pour une durĂ©e de 7 jours
  176.          */
  177.       
  178.         // Recherche des donnĂ©es colonne de droite
  179.         $now = new \DateTime();
  180.         $duree 7
  181.         
  182.         // On regarde s'il y a des prestations dans l'annĂ©e
  183.         $datearrivee = (new \Datetime())->modify('+ 1 day')->format("Y-m-d");
  184.         $prestations $this->residenceService->getPrestations($id$datearrivee$duree$request->getLocale(), 360);
  185.         
  186.         if(count($prestations['ListReponses']) > 0)  {
  187.             if ($request->getMethod() == 'POST') { // Maj des participants
  188.                 $this->travellerService->setTravellers($request->request);
  189.             }
  190.             if($request->query->has("datearrivee")) {
  191.                 $session->remove('formule');
  192.                 $session->remove('hebergement');
  193.                 $tdatearrivee =  $request->query->get("datearrivee");
  194.                 $duree = (int) $request->query->has("duree") ? $request->query->get("duree") : 7;
  195.                 if($this->toolService->validateDate($tdatearrivee'Y-m-d') || $this->toolService->validateDate($tdatearrivee'd/m/Y')) {
  196.                     $datearrivee =  $tdatearrivee;
  197.                     $access false;
  198.                     $this->travellerService->setTravellers($request->query);
  199.                     $this->travellerService->setDateDuree($datearrivee$duree);
  200.                 }
  201.             } else {
  202.                 
  203.                 if(empty($this->travellerService->travellers['actdatearrivee'])) {
  204.                     /* 
  205.                         On recherche une prestation par dĂ©faut, 
  206.                         la première date disponible 
  207.                         et le tarif le moins cher en affichant Ă  partir de
  208.                     */
  209.                     
  210.                     // si oui on recherche la prestation par dĂ©faut et la première date de disponibilitĂ© Ă  partir de tomorrow
  211.                     
  212.                     $obj = [
  213.                         "IdLieuHebergement" => $id,
  214.                         "NbDates" => 1
  215.                     ];
  216.                     
  217.                     $dispoPrice $this->iresaManager->getDispoPrice($obj);
  218.                     if ($dispoPrice['ListPrestations']) {   // plusieurs formules existent
  219.                         foreach ($dispoPrice['ListPrestations'] as $formule => $prestation) { 
  220.                             $dispoPricePrestations [] = $prestation;
  221.                         }
  222.                     }
  223.                     $tdatearrivee $dispoPricePrestations[0]['DateDebut'] ;
  224.                     $duree $dispoPricePrestations[0]['Duree'];
  225.                     $datearrivee = \DateTime::createFromFormat("Y-m-d"$tdatearrivee)->format('d/m/Y');
  226.                     $this->travellerService->setTravellers($request->query);
  227.                     $this->travellerService->setDateDuree($datearrivee$duree);
  228.                     
  229.                 }
  230.             }
  231.             
  232.             $dateDebutDefault $this->travellerService->travellers['actdatearrivee'];
  233.             $datearrivee $this->travellerService->travellers['actdatearrivee'];
  234.             $duree $this->travellerService->travellers['actnbnuits'];
  235.             $type $request->query->get('type');
  236.             $delta $type == "planning" 31 0;
  237.             
  238.             /* BEGIN  DUPLICATE CODE  BLOC 1*/
  239.             $planning $this->residenceService->getPlanning($request$datearrivee$duree$type$delta$residence );
  240.             if ($planning == "redirect"
  241.             { 
  242.                 if($request->isXmlHttpRequest()) {// Envoi signale de redirection via ajax
  243.                     $response = new Response("{'redirect': true}");
  244.                     $response->headers->set('Content-Type''application/json');
  245.                     return $response;
  246.                 } else { // Redirection vers le produit
  247.                     return $this->redirectToRoute('ac_platform_produit', ['slug' => $slug'id' => $id]);
  248.                 }
  249.             }
  250.             $packages $planning['packages'];
  251.             $prestations $planning['prestations'];
  252.             $listDatesDebut $planning['listDatesDebut'];
  253.             $listDurees $planning['listDurees'];
  254.             $idPrestationDefault $planning['idPrestationDefault'];
  255.             /* END  DUPLICATE CODE  BLOC 1*/
  256.         }
  257.         $comm_status true;
  258.         if(count($prestations['ListReponses']) == 0) {
  259.             $comm_status false;
  260.             $idPrestationDefault null;
  261.         }
  262.         if(!$comm_status) {
  263.             $produit null;
  264.             $formules null;
  265.             $reponses null;
  266.         }
  267.         $comm_status true;
  268.         
  269.         $vars = array(
  270.             "id" => $id,
  271.             "comm_status" => $comm_status,
  272.             "slug" => $slug,
  273.             "residence" => $residence,
  274.             "travellers" => $this->travellerService->getTravellers(),
  275.             "typos" => $typologies,                                 // Contenu des typologies
  276.             "formuleBase" => $formuleBase,                           // contenu des packages et formule de base
  277.             "formules" => $formules,    
  278.             "packages" => $packages,
  279.             "prestations" => $prestations,
  280.             "infosResidence" => $infosResidence,
  281.             "listDiscover" => $listDiscover,
  282.             "listDiscoverLink" =>$listDiscoverLink,
  283.             "listEvent" => $listEvent,
  284.             "slidesHeader" => $slidesHeader,
  285.             "slidesContent" => $slidesContent,
  286.             "themes" => $themes,
  287.             "prestationDefault" => $prestationDefault,
  288.             "listDurees" => json_encode($listDureesJSON_UNESCAPED_SLASHES),
  289.             "duree" => $duree//$listDurees[0],
  290.             "listDatesDebut" => json_encode($listDatesDebut),
  291.             "idPrestationDefault" => $idPrestationDefault,
  292.             'selectedFormule' => $selectedFormule,
  293.             'selectedHebergement' => $selectedHebergement,
  294.             'toolService' => $this->toolService,
  295.             'breadCrumb' => $breadCrumb
  296.         );
  297.         return $this->render('/front/Produit/produit.html.twig'$vars);
  298.     }
  299.     
  300.     /**
  301.      * @Route("/produit/refresh", name="ac_platform_produit_refresh")
  302.      */
  303.     public function productRefresh(Request $request)
  304.     {
  305.         $session $request->getSession();
  306.         $type $request->query->get('type');
  307.         $delta $type == "month" 31 0;
  308.         
  309.         $message = [];
  310.         $message[] = "Refresh typologies";
  311.         
  312.         $locale $request->getLocale();
  313.         
  314.         $now = new \DateTime();
  315.         $lang  $this->em->getRepository(Language::class)->findOneByCode($locale);
  316.         
  317.         
  318.         
  319.         $this->residenceService->setLocale($locale);
  320.         
  321.         $travellers $this->travellerService->travellers;
  322.         if($travellers['idResidence'] != $request->query->get('id')) {
  323.             $travellers['idResidence'] = $request->query->get('id');
  324.             $this->travellerService->travellers $travellers;
  325.         }
  326.         
  327.         //$id = $request->query->get('id');
  328.         $id $this->travellerService->travellers['idResidence'];
  329.         
  330.         $datearrivee $request->query->get('datearrivee');
  331.         $duree $request->query->get('duree');
  332.         $datearrivee $this->toolService->dateFrToEn($datearrivee);
  333.         $dateDebutDefault $datearrivee;
  334.         $this->travellerService->setDateDuree($datearrivee$duree);
  335.         
  336.         $residence =  $this->em->getRepository(Residence::class)->findOneBy(['idiresa' => $id]);
  337.         if(!$residence) {
  338.             throw $this->createNotFoundException('RĂ©sidence inexistante');
  339.         }
  340.         $params = [
  341.             'lang' => $lang,
  342.             'residence' => $residence
  343.         ];
  344.         $typologies $this->em->getRepository(Typologie::class)->findOnPageBy($params);
  345.         $packages $this->em->getRepository(Package::class)->findOnPageBy($params);
  346.         /* BEGIN  DUPLICATE CODE  BLOC 1*/
  347.         $planning $this->residenceService->getPlanning($request$datearrivee$duree$type$delta$residence );
  348.        
  349.         if (isset($planning['redirect']))  {
  350.             if($request->isXmlHttpRequest()) {// Envoi signale de redirection via ajax
  351.                 $response = new Response("{'redirect': true}");
  352.                 $response->headers->set('Content-Type''application/json');
  353.                 return $response;
  354.             } else { // Redirection vers le produit
  355.                 $residence_nom str_replace("*"""$residence->getNom());
  356.                 $residence_slug $this->toolService->slugify($residence_nom);
  357.                 return $this->redirectToRoute('ac_platform_produit', ['slug' => $residence_slug'id' => $id]);
  358.             }
  359.         }
  360.         $packages $planning['packages'];
  361.         $formuleBase $packages[0];
  362.         $prestations $planning['prestations'];
  363.         $listDatesDebut $planning['listDatesDebut'];
  364.         $listDatesFin $planning['listDatesFin'];
  365.         $listDurees $planning['listDurees'];
  366.         $idPrestationDefault $planning['idPrestationDefault'];
  367.         
  368.         /* END  DUPLICATE CODE  BLOC 1*/
  369.         
  370.         $session->set('idPrestation'$idPrestationDefault);
  371.         
  372.         $selectedFormule 0;
  373.         $selectedHebergement null;
  374.         
  375.         if ($session->has('formule')) {
  376.             $message[] = "Formule en session";
  377.             $selectedFormule $session->get('formule');
  378.         }
  379.         
  380.         $hebergement $session->get('hebergement');
  381.         if (!is_null($hebergement)) {
  382.             $hebergement $session->get('hebergement');
  383.             $selectedHebergement $hebergement->IdPrestation;
  384.         }
  385.         $vars = [
  386.             "message" => $message,
  387.             'delta' => $delta,
  388.             "listDatesDebut" => $listDatesDebut,
  389.             "listDatesFin" => $listDatesFin,
  390.             "typos" => $typologies,
  391.             "listDurees" => $listDurees,
  392.             "prestations" => $prestations,                            // contenu des packages et formule de base
  393.             "formuleBase" => $formuleBase,
  394.             "packages" => $packages,
  395.             "planning" => $planning,
  396.             "idPrestationDefault" => $idPrestationDefault,
  397.             "dateDebutDefault" => $datearrivee,
  398.             "duree" => $duree,
  399.             "travellers" => $this->travellerService->getTravellers(),
  400.             "debug" => [
  401.                 'ListReponses' => $prestations['ListReponses'] ,
  402.                 'packages' => $packages,
  403.                 'Travellers' => $this->travellerService->getTravellers()
  404.             ]
  405.         ];
  406.         $response = new Response();
  407.         $response->setContent(json_encode($varsJSON_UNESCAPED_SLASHES));
  408.         $response->headers->set('Symfony-Debug-Toolbar-Replace'1);
  409.         $response->headers->set('Content-Type''application/json');
  410.         return $response;
  411.     }
  412.     
  413.     /**
  414.      * @Route("/getHebergements", name="ac_platform_getHebergements")
  415.      */
  416.     public function getHebergements(Request $request) { 
  417.         $locale $request->getLocale();
  418.         $session $request->getSession();
  419.         $mode "";
  420.         $method "html";
  421.         $prestations $request->request->get('prestations');
  422.         if($request->query->has('edit')) {$mode "edit";}
  423.         if($request->query->has('method')) {$method $request->request->get('method');}
  424.         
  425.         $this->residenceService->setLocale($locale);
  426.         
  427.         $selectedHebergementId null;
  428.         if ($session->has('hebergement')) {
  429.             $selectedHebergement $session->get('hebergement');
  430.             $selectedHebergementId $selectedHebergement->IdPrestation;
  431.         }
  432.         
  433.         $hebergements $this->residenceService->getHebergements($prestations$selectedHebergementId$mode);
  434.         if($method == "ajax") {
  435.             return new JsonResponse($hebergements);
  436.         }
  437.         return new Response($hebergements);
  438.     }
  439.     /**
  440.      * @Route("/setcodepromo", name="ac_platform_setcodepromo")
  441.      */
  442.     public function setcodepromo(Request $request)
  443.     {
  444.         $session $request->getSession();
  445.         $codepromo $request->request->get("codepromo");
  446.         $session->set('codepromo'$codepromo);
  447.         
  448.         return new JsonResponse($codepromo);
  449.     }
  450.     /**
  451.      * @Route("/setSessionVar", name="product_setSessionVar")
  452.      */
  453.     public function setSessionVar(Request $request) {
  454.         $session $request->getSession();
  455.         $var $request->request->get("var");
  456.         $value $request->request->get("value");
  457.         $ret $session->set($var$value);
  458.         return new JsonResponse($ret);
  459.     }
  460.      /**
  461.      * @Route("/setSession", name="ac_platform_setSession")
  462.      */
  463.     public function setSession(Request $request)
  464.     {
  465.         $session $request->getSession();
  466.         $id $request->request->get("id");
  467.         $val $request->request->get("val");
  468.         $session->set($id$val);
  469.         return new JsonResponse($id."done".$val);
  470.     }
  471.     
  472.     /**
  473.      * @Route("/participants", name="ac_platform_participants")
  474.      */
  475.     public function participants(Request $request)
  476.     {
  477.         $retour = array();
  478.         return $this->render('/front/Recherche/participants.html.twig'$retour);
  479.     }
  480.     /**
  481.      * @Route("/setages", name="ac_platform_setages")
  482.      */
  483.     public function setages(Request $request)
  484.     {
  485.         
  486.         $travellers $this->travellerService->travellers;
  487.         if($travellers['idResidence'] != $request->request->get('id')) {
  488.             $travellers['idResidence'] = $request->request->get('id');
  489.             $this->travellerService->travellers $travellers;
  490.         }
  491.         $result =  $this->travellerService->setTravellers($request->request);
  492.         return new JsonResponse($result);
  493.     }
  494.     /**
  495.      * @Route("/getages", name="ac_platform_getages")
  496.      */
  497.     public function getages(Request $request)
  498.     {
  499.         $type $request->query->get("type""enfants");
  500.      
  501.         $travellers $this->travellerService->travellers;
  502.         $nb 0;
  503.         if($request->request->has("nb" $type)) {
  504.             $nb $request->request->get("nb" $type);
  505.         } else {
  506.             $nb $travellers['actnb' $type];
  507.         }
  508.         $error 0;
  509.         foreach($travellers['ages' $type] as $ages) {
  510.             if (empty($ages)) {$error ++;}
  511.         }
  512.         
  513.         $maxDate date("Y-m-d");
  514.         if($type == "enfants") {
  515.             $date18YearsAgo strtotime("-18 years");
  516.             $minDate date("Y-m-d"$date18YearsAgo);
  517.         } elseif($type == "bebes") {
  518.             $date2YearsAgo strtotime("-2 years");
  519.             $minDate date("Y-m-d"$date2YearsAgo);
  520.         }
  521.         $retour = array(
  522.             "nb" $type => $nb,
  523.             "minDate" => $minDate,
  524.             "maxDate" => $maxDate,
  525.             "travellers" => $travellers,
  526.             "error" => $error
  527.         );
  528.         return $this->render('/front/Recherche/ages_' $type '.html.twig'$retour);
  529.     }
  530.     
  531.      /**
  532.      * @Route("/majFormule", name="ac_platform_majFormule")
  533.      */
  534.     public function majFormule()
  535.     {
  536.         return $this->render('/front/Reservation/majformule.html.twig');
  537.     }
  538.     public function mobile()
  539.     {
  540.         return $this->render('/front/Recherche/mobile.html.twig');
  541.     }
  542.     public function gettarif(Request $request)
  543.     {
  544.         $idpack $request->request->get("idpack");
  545.         $idtypo $request->request->get("idtypo");
  546.         $retour = array(
  547.             "reponse" => null,
  548.             "defaultcontenutypo" => null,
  549.             "defaultcontenuformule" => null
  550.         );
  551.         return $this->render('/front/Produit/recaptarif.html.twig'$retour);
  552.     }
  553.     public function adultes($nbadultes 1)
  554.     {
  555.         return $this->render('/front/Moteur/adultes.html.twig', ['nbadultes' => $nbadultes]);
  556.     }
  557.     
  558.     public function enfants($nbenfants 0)
  559.     {
  560.         return $this->render('/front/Moteur/enfants.html.twig', ['nbenfants' => $nbenfants]);
  561.     }
  562.     
  563.     public function bebes($nbbebes 0)
  564.     {
  565.         return $this->render('/front/Moteur/bebes.html.twig', ['nbbebes' => $nbbebes]);
  566.     }
  567. }