src/Services/TravellerService.php line 123

Open in your IDE?
  1. <?php
  2. namespace App\Services;
  3. use Doctrine\ORM\EntityManagerInterface;
  4. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  5. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  6. use Symfony\Component\DependencyInjection\ContainerInterface as Container;
  7. use App\Services\ToolService;
  8. /**
  9.  * traveller Service
  10.  */
  11. class TravellerService extends AbstractController
  12. {
  13.     private $tool;
  14.     private $em;
  15.     private $session;
  16.     
  17.     public $travellers;
  18.     
  19.     public function __construct(ToolService $toolEntityManagerInterface $emSessionInterface $session) {
  20.         $this->tool $tool;
  21.         $this->em $em;
  22.         $this->session $session;
  23.        
  24.         $this->travellers = [
  25.             'idResidence' => null,
  26.             'nbPax' => 1,
  27.             'actnbadultes' => 1,
  28.             'actnbenfants' => 0,
  29.             'actnbbebes' => 0,
  30.             'agesadultes' => [ $this->setBirthday()],
  31.             'nomsadultes' => [],
  32.             'prenomsadultes' => [],
  33.             'agesenfants' =>  [],
  34.             'nomsenfants' =>  [],
  35.             'prenomsenfants' =>  [],
  36.             'agesbebes' =>  [],
  37.             'nomsbebes' =>  [],
  38.             'prenomsbebes' =>  [],
  39.             'actdatearrivee' => null,
  40.             'actdatedepart' => null,
  41.             'actnbnuits' => null,
  42.         ];
  43.         
  44.        
  45.         if ($this->session->has('travellers')) {
  46.             
  47.            $travellersFromSession $this->session->get('travellers');
  48.            
  49.             $this->travellers['idResidence'] = $travellersFromSession['idResidence'];
  50.             $this->travellers['nbPax'] = $travellersFromSession['nbPax'];
  51.             $this->travellers['actnbadultes'] = $travellersFromSession['actnbadultes'];
  52.             $this->travellers['actnbenfants'] = $travellersFromSession['actnbenfants'];
  53.             $this->travellers['actnbbebes'] = $travellersFromSession['actnbbebes'];
  54.             $this->travellers['agesadultes'] = $travellersFromSession['agesadultes'];
  55.             $this->travellers['nomsadultes'] = $travellersFromSession['nomsadultes'];
  56.             $this->travellers['prenomsadultes'] = $travellersFromSession['prenomsadultes'];
  57.             $this->travellers['agesenfants'] = $travellersFromSession['agesenfants'];
  58.             $this->travellers['nomsenfants'] = $travellersFromSession['nomsenfants'];
  59.             $this->travellers['prenomsenfants'] =$travellersFromSession['prenomsenfants'];
  60.             $this->travellers['agesbebes'] = $travellersFromSession['agesbebes'];
  61.             $this->travellers['nomsbebes'] = $travellersFromSession['nomsbebes'];
  62.             $this->travellers['prenomsbebes'] =$travellersFromSession['prenomsbebes'];
  63.             $this->travellers['actdatearrivee'] = $travellersFromSession['actdatearrivee'];
  64.             $this->travellers['actdatedepart'] = $travellersFromSession['actdatedepart'];
  65.             $this->travellers['actnbnuits'] = $travellersFromSession['actnbnuits'];
  66.         }
  67.         $this->popIfNull('agesadultes');
  68.         $this->popIfNull('nomsadultes');
  69.         $this->popIfNull('prenomsadultes');
  70.         $this->popIfNull('agesenfants');
  71.         $this->popIfNull('nomsenfants');
  72.         $this->popIfNull('prenomsenfants');
  73.         $this->popIfNull('agesbebes');
  74.         $this->popIfNull('prenomsbebes');
  75.         $this->popIfNull('prenomsbebes');
  76.     }
  77.     protected function popIfNull($field) {
  78.         $array = [];
  79.         foreach($this->travellers[$field] as $item) {
  80.             if(!is_null($item)) {$array[] = $item;}
  81.         }
  82.         $this->travellers[$field] = $array;
  83.     }
  84.     public function init() {
  85.         $this->travellers = [
  86.             'idResidence' => null,
  87.             'nbPax' => 1,
  88.             'actnbadultes' => 1,
  89.             'actnbenfants' => 0,
  90.             'actnbbebes' => 0,
  91.             'agesadultes' => [ $this->setBirthday()],
  92.             'nomsadultes' => [],
  93.             'prenomsadultes' => [],
  94.             'agesenfants' =>  [],
  95.             'nomsenfants' =>  [],
  96.             'prenomsenfants' =>  [],
  97.             'agesbebes' =>  [],
  98.             'nomsbebes' =>  [],
  99.             'prenomsbebes' =>  [],
  100.             'actdatearrivee' => null,
  101.             'actdatedepart' => null,
  102.             'actnbnuits' => null,
  103.             'test' =>  [],
  104.         ];
  105.         $this->save();
  106.     }
  107.     
  108.     public function save() {
  109.         $this->session->set('travellers'$this->travellers);
  110.         return $this->travellers;
  111.     }
  112.     public function setDates($datearrivee$datedepart) {
  113.         $nbnuits $this->getNbNuits($datearrivee$datedepart);
  114.         $this->travellers['actdatearrivee'] = $datearrivee;
  115.         $this->travellers['actdatedepart'] = $datedepart;
  116.         $this->travellers['actnbnuits'] = $nbnuits;
  117.         $this->save();
  118.         return $travellers;
  119.     }
  120.     public function setDateDuree($datearrivee$duree) {
  121.         // $travellers['actdatearrivee'] = $datearrivee;
  122.         // $travellers['actnbnuits'] = $duree;
  123.  
  124.         if (preg_match("/^(0[1-9]|[1-2][0-9]|3[0-1])\/(0[1-9]|1[0-2])\/[0-9]{4}$/"$datearrivee)) {
  125.             // date FR
  126.             $datearrivee $this->tool->dateFrToEn($datearrivee) ;
  127.         } elseif (preg_match("/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/"$datearrivee)) {
  128.            // date EN
  129.         } else {
  130.             // Format unknown
  131.         }
  132.         
  133.         if($duree == "") {
  134.             $datedepart null;
  135.         } else {
  136.             $datedepart = new \DateTime(date('Y-m-d'strtotime($datearrivee)));
  137.             
  138.             $datedepart->modify('+' . (int) $duree ' days');
  139.             $datedepart $datedepart->format('Y-m-d');
  140.         }
  141.         
  142.         $this->travellers['actdatedepart'] = $datedepart;
  143.         
  144.         $this->travellers['actdatearrivee'] = $datearrivee;
  145.         $this->travellers['actnbnuits'] = $duree;
  146.         return $this->save();
  147.     }
  148.     public function getTravellers() {
  149.         return $this->travellers;
  150.     }
  151.     public function setTravellers($requestParams) {
  152.        
  153.         if(empty($requestParams)) {
  154.             return $this->travellers;
  155.         }
  156.        
  157.         if($requestParams->has("nbadultes") ) {
  158.             $nbadultes $requestParams->get("nbadultes");
  159.             $tabAgeAdultes = [];
  160.             if($nbadultes 0) {
  161.                 for($nb 0$nb $nbadultes$nb++) {
  162.                     $tabAgeAdultes[] = $this->setBirthday();
  163.                 }
  164.             }
  165.         } else {
  166.             $nbadultes $this->travellers['actnbadultes'];
  167.             $tabAgeAdultes $this->travellers['agesadultes'];
  168.         }
  169.         if($requestParams->has("nbenfants") ) {
  170.             $nbenfants $requestParams->get("nbenfants");
  171.             $tabAgeEnfants = [];
  172.             if($nbenfants 0) {
  173.                 for($nb 0$nb $nbenfants$nb++) {
  174.                     $dateEnfant $requestParams->get("enfant_datenaissance_".($nb+1));
  175.                     // Crée un objet DateTime à partir de la date au format YYYY-MM-DD
  176.                     $dateTime = \DateTime::createFromFormat('Y-m-d'$dateEnfant);
  177.                     if ($dateTime !== false) {
  178.                         // Si la date est valide, la convertir au format DD/MM/YYYY
  179.                         $date $dateTime->format('d/m/Y');
  180.                     } else {
  181.                         // La date n'est pas valide ou n'est pas au format YYYY-MM-DD
  182.                         // Trouver la date de naissance par défaut d'un enfant de 10 ans par rapport à la date du jour
  183.                         $date date('d/m/Y'strtotime('-10 years'));
  184.                     }
  185.                     $tabAgeEnfants[] = $date;
  186.                 }
  187.             }
  188.         } else {
  189.             $nbenfants $this->travellers['actnbenfants'];
  190.             $tabAgeEnfants $this->travellers['agesenfants'];
  191.         }
  192.         if($requestParams->has("nbbebes") ) {
  193.             $nbbebes $requestParams->get("nbbebes");
  194.             $tabAgeBebes = [];
  195.             if($nbbebes 0) {
  196.                 for($nb 0$nb $nbbebes$nb++) {
  197.                     $dateBebe $requestParams->get("bebe_datenaissance_".($nb+1));
  198.                     // Crée un objet DateTime à partir de la date au format YYYY-MM-DD
  199.                     $dateTime = \DateTime::createFromFormat('Y-m-d'$dateBebe);
  200.                     if ($dateTime !== false) {
  201.                         // Si la date est valide, la convertir au format DD/MM/YYYY
  202.                         $date $dateTime->format('d/m/Y');
  203.                     } else {
  204.                         // La date n'est pas valide ou n'est pas au format YYYY-MM-DD
  205.                         // Trouver la date de naissance par défaut d'un enfant de 2 ans par rapport à la date du jour
  206.                         $date date('d/m/Y'strtotime('-2 years'));
  207.                     }
  208.                     $tabAgeBebes[] = $date;
  209.                 }
  210.             }
  211.         } else {
  212.             $nbbebes $this->travellers['actnbbebes'];
  213.             $tabAgeBebes $this->travellers['agesbebes'];
  214.         }
  215.         $nbPax $nbadultes  $nbenfants;
  216.         $this->travellers['nbPax'] = $nbPax;
  217.         $this->travellers['actnbadultes'] = $nbadultes
  218.         $this->travellers['actnbenfants'] = $nbenfants;
  219.         $this->travellers['actnbbebes'] = $nbbebes;
  220.         $this->travellers['agesadultes'] = $tabAgeAdultes;
  221.         $this->travellers['agesenfants'] = $tabAgeEnfants;
  222.         $this->travellers['agesbebes'] = $tabAgeBebes;
  223.         
  224.         return $this->save();
  225.     }
  226.     
  227.     private function setBirthday() {
  228.         $date = [];
  229.         
  230.         $now = new \DateTime();
  231.         $date $now->modify('-19 years')->format('d/m/Y');
  232.         
  233.         return $date;
  234.     }
  235.     public function getNbNuits($arrivee$depart) {
  236.         $nuits 0;
  237.         if($arrivee != null && $depart != null) {
  238.             $datearrivee = \DateTime::createFromFormat('d/m/Y'$arrivee);
  239.             $datedepart = \DateTime::createFromFormat('d/m/Y'$depart);
  240.             if ($datearrivee instanceof \DateTime && $datedepart instanceof \DateTime) {
  241.                 $interval $datearrivee->diff($datedepart);
  242.                 $nuits $interval->format('%a');
  243.             }
  244.         }
  245.         
  246.         return $nuits;
  247.     }
  248.     
  249.     public function removeTravellersFromSession() {
  250.         $this->session->remove('travellers');
  251.     }
  252. }