src/Controller/AdminController.php line 612

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use DateTime;
  4. use DatePeriod;
  5. use DateInterval;
  6. use Dompdf\Dompdf;
  7. use App\Entity\Sms;
  8. use Dompdf\Options;
  9. use App\Entity\Page;
  10. use App\Entity\Droit;
  11. use App\Entity\Ligne;
  12. use App\Entity\Centre;
  13. use App\Entity\Gerant;
  14. use App\Entity\Marque;
  15. use App\Entity\Modele;
  16. use IntlDateFormatter;
  17. use App\Entity\Adresse;
  18. use App\Entity\Energie;
  19. use App\Entity\MarqueCl;
  20. use App\Entity\ModeleCl;
  21. use App\Entity\Promotion;
  22. use App\Form\AdresseType;
  23. use App\Entity\CentreType;
  24. use App\Entity\Partenaire;
  25. use App\Entity\Rendezvous;
  26. use App\Entity\TypeVisite;
  27. use App\Entity\ClientLibre;
  28. use App\Entity\Utilisateur;
  29. use App\Entity\CentreGroupe;
  30. use App\Entity\ClientCompte;
  31. use App\Entity\LigneBlocage;
  32. use App\Entity\LigneHoraire;
  33. use App\Entity\TypeVehicule;
  34. use App\Form\CentreFormType;
  35. use Psr\Log\LoggerInterface;
  36. use App\Entity\CentreHoraire;
  37. use App\Form\UtilisateurType;
  38. use App\Entity\CentreFonction;
  39. use App\Service\AccessService;
  40. use App\Entity\ParametreCentre;
  41. use App\Entity\RendezVousInfos;
  42. use App\Entity\UtilisateurInfo;
  43. use Doctrine\Persistence\Proxy;
  44. use App\Entity\CentrePartenaire;
  45. use App\Entity\CentrePrestation;
  46. use App\Entity\PromotionCreneau;
  47. use App\Form\ParametreCentreType;
  48. use Symfony\Component\Mime\Email;
  49. use App\Entity\RendezVousVehicule;
  50. use App\Entity\PromotionRecurrence;
  51. use App\Entity\ParametreCentreAdmin;
  52. use App\Entity\RendezVousRecurrence;
  53. use App\Repository\ModeleRepository;
  54. use App\Controller\PaylineController;
  55. use App\Entity\CentreCouponPromotion;
  56. use App\Entity\ParametreCentreGroupe;
  57. use App\Entity\RendezVousFacturation;
  58. use App\Entity\LigneBlocageRecurrence;
  59. use App\Form\ParametreCentreGroupeType;
  60. use Doctrine\Persistence\ObjectManager;
  61. use Doctrine\ORM\EntityManagerInterface;
  62. use App\Entity\RendezVousPaiementMultiple;
  63. use SebastianBergmann\Environment\Console;
  64. use Symfony\Contracts\Cache\ItemInterface;
  65. use Knp\Component\Pager\PaginatorInterface;
  66. use Symfony\Contracts\Cache\CacheInterface;
  67. use Symfony\Component\HttpFoundation\Request;
  68. use Symfony\Component\Mailer\MailerInterface;
  69. use Symfony\Component\HttpFoundation\Response;
  70. use Symfony\Component\Routing\Annotation\Route;
  71. use App\Repository\RendezVousVehiculeRepository;
  72. use Symfony\Component\HttpFoundation\JsonResponse;
  73. use Symfony\Component\Security\Http\SecurityEvents;
  74. use Symfony\Component\HttpFoundation\RedirectResponse;
  75. use Symfony\Component\Form\Extension\Core\Type\TimeType;
  76. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  77. use Symfony\Component\Form\Extension\Core\Type\IntegerType;
  78. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  79. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  80. use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
  81. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  82. use Doctrine\DBAL\Exception\ForeignKeyConstraintViolationException;
  83. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  84. use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
  85. use function PHPUnit\Framework\isEmpty;
  86. // Nous avons besoin d'accéder à la requête pour obtenir le numéro de page
  87. class AdminController extends AbstractController
  88. {
  89.     public $id;
  90.     protected $em;
  91.     protected $cache;
  92.     protected $mois;
  93.     protected $jours;
  94.     private $passwordHasher;
  95.     private $apiController;
  96.     private $PaylineController;
  97.     private $accessService;
  98.     private $session;
  99.     private $logger;
  100.     private $mailer;
  101.     public function __construct(EntityManagerInterface $entityManagerCacheInterface $cacheUserPasswordHasherInterface $passwordHasherApiController $apiControllerPaylineController $PaylineControllerAccessService $accessServiceSessionInterface $sessionLoggerInterface $loggerMailerInterface $mailer)
  102.     {
  103.         $this->jours = array('Lundi''Mardi''Mercredi''Jeudi''Vendredi''Samedi''Dimanche');
  104.         $this->mois = array(=> "Janvier"=> "Février"=> "Mars"=> "Avril"=> "Mai"=> "Juin"=> "Juillet"=> "Août"=> "Septembre"10 => "Octobre"11 => "Novembre"12 => "Décembre");
  105.         $this->em $entityManager;
  106.         $this->cache $cache;
  107.         $this->passwordHasher $passwordHasher;
  108.         $this->apiController $apiController;
  109.         $this->PaylineController $PaylineController;
  110.         $this->accessService $accessService;
  111.         $this->session $session;
  112.         $this->logger $logger;
  113.         $this->mailer $mailer;
  114.         if (array_key_exists('SERVER_NAME'$_SERVER)) {
  115.             $ParametreCentreGroupe $this->em->getRepository(ParametreCentreGroupe::class)->findOneByUrl($_SERVER['SERVER_NAME']);
  116.         } else {
  117.             $ParametreCentreGroupe false;
  118.         }
  119.         if ($ParametreCentreGroupe) {
  120.             $this->id $ParametreCentreGroupe->getCentreGroupe()->getId();
  121.             $this->session->set('centre_groupe'$ParametreCentreGroupe->getCentreGroupe()->getId());
  122.         } else {
  123.             $this->id 1;
  124.             $this->session->set('centre_groupe'$this->id);
  125.         }
  126.     }
  127.     /**
  128.      * @Route("/admin/home", name="home")
  129.      */
  130.     public function index(Request $request): Response
  131.     {
  132.         //1590708
  133.         // $this->getCouponCteasy('CT8002LWC');
  134.         // $conn_rdv = new mysqli('185.43.45.121', 'ct_rdv', 'MhwAJSB5vjFYHeyf', 'ct_rdv_shared', 3306);
  135.         // $conn_rdv->set_charset("utf8");
  136.         // // Check connection
  137.         // if ($conn_rdv->connect_error) {
  138.         //     die("Connection failed base_datas_rdv: " . $conn_rdv->connect_error);
  139.         // }
  140.         // $ligne_rank = 0;
  141.         //     $rdv = $this->em->getRepository(RendezVous::class)->find(720387);
  142.         // dd($rdv->getCentre()->getCentreGroupe()->getLignesByTypes(array('VL', 'Mixte')));
  143.         // foreach ($rdv->getCentre()->getCentreGroupe()->getLignesByTypes(array('VL', 'Mixte')) as $key => $ligne) {
  144.         //     //je suis dedans
  145.         //     $ligne_rank++;
  146.         //     if ($rdv->getLigne()->getId() == $ligne->getId()) {
  147.         //         break;
  148.         //     }
  149.         //     //$ligne_rank++;
  150.         // }
  151.         //  $RendezVous = $this->em->getRepository(RendezVous::class)->find(1367310);
  152.         //  $this->Attestation_Rendez_Vous($RendezVous);
  153.         $CentreGroupe $this->apiController->MarqueByPopulaire();
  154.         return $this->render('public/construction.html.twig', [
  155.             'controller_name' => 'AdminController',
  156.         ]);
  157.     }
  158.     /**
  159.      * @Route("/administration/calendrier", name="administration")
  160.      */
  161.     public function administration(): Response
  162.     {
  163.         return $this->redirectToRoute('calendrier');
  164.     }
  165.     /**
  166.      * @Route("/admin", name="adminRedir")
  167.      */
  168.     public function adminRedir(): Response
  169.     {
  170.         return $this->redirectToRoute('calendrier');
  171.     }
  172.     private function creneauxDispo($start$end$prestationId)
  173.     {
  174.         set_time_limit(1000);
  175.         $events = array();
  176.         /****************************************
  177.         Définition de l'intervalle de recherche
  178.          *****************************************/
  179.         $bornes_recherche = array();
  180.         list($anneeStart$moisStart$jourStart) = explode("-"$start);
  181.         $bornes_recherche['debut'] = new DateTime();
  182.         $jourStart explode('T'$jourStart)[0];
  183.         $bornes_recherche['debut']->setDate($anneeStart$moisStart$jourStart);
  184.         if ($bornes_recherche['debut'] > new DateTime()) {
  185.             $bornes_recherche['debut']->setTime(00);
  186.         }
  187.         if ($bornes_recherche['debut'] == new \DateTime()) {
  188.             $bornes_recherche['debut']->setTime(date('H'), date('i'));
  189.         }
  190.         if ($bornes_recherche['debut'] < new DateTime()) {
  191.             $bornes_recherche['debut'] = new DateTime();
  192.         }
  193.         list($anneeEnd$moisEnd$jourEnd) = explode("-"$end);
  194.         $bornes_recherche['fin'] = new DateTime();
  195.         $jourEnd explode('T'$jourEnd)[0];
  196.         $bornes_recherche['fin']->setDate($anneeEnd$moisEnd$jourEnd);
  197.         $bornes_recherche['fin']->setTime(2359);
  198.         $centre $this->em->getRepository(Centre::class)->findByPrestation($prestationId);
  199.         $centre_id $centre[0]->getId();
  200.         $centre_type_id $centre[0]->getCentreType()->getId();
  201.         /** @var Centre $data_centre */
  202.         $data_centre $this->cache->get('Centre_' $centre_id, function () use ($centre_id) {
  203.             $data_centre $this->em->getRepository(Centre::class)->find($centre_id);
  204.             return $data_centre;
  205.         });
  206.         if ($prestationId !== 'null') {
  207.             $data_Prestation $this->cache->get('Prestation' $prestationId, function () use ($prestationId) {
  208.                 $data_Prestation $this->em->getRepository(CentrePrestation::class)->find($prestationId);
  209.                 return $data_Prestation;
  210.             });
  211.             $duree $data_Prestation->getPstDuree();
  212.         } else {
  213.             return null;
  214.         }
  215.         /****************************************
  216.         Récupération des horaires d'ouverture
  217.          ****************************************/
  218.         $data_Horaire_centre $this->cache->get('Horaire_' $data_centre->getid(), function () use ($data_centre) {
  219.             $data_Horaire_centre $this->em->getRepository(CentreHoraire::class)->getHoraires($data_centre->getid());
  220.             return $data_Horaire_centre;
  221.         });
  222.         /**************************************
  223.         Récupération des lignes
  224.          **************************************/
  225.         // $data_Ligne = $this->cache->get('Ligne_' . $this->id . '_' . $data_centre->getCentreType()->getId(), function () use ($data_centre) {
  226.         //     $data_Ligne = $this->em->getRepository(Ligne::class)->findLigneAndHoraireByTypeCentre($this->id, $data_centre->getCentreType()->getId());
  227.         //     return $data_Ligne;
  228.         // });
  229.         $data_Ligne $this->em->getRepository(Ligne::class)->findLigneAndHoraireByCentreGroupe($this->id);
  230.         $holidaysCentre $this->em->getrepository(ParametreCentre::class)->findHolidaysByCentreGroupeAndCentreType($this->id$centre_type_id);
  231.         $holidaysCentreFlat array_reduce($holidaysCentre, function ($carry$item) {
  232.             return array_merge($carry$item['holidays']);
  233.         }, []);
  234.         $year date("Y");
  235.         $holidays $this->apiController->getFormateHolidays($holidaysCentreFlat$year);
  236.         /***************************************
  237.         Récupération des rendez-vous compris
  238.         dans la zone de requête
  239.          ***************************************/
  240.         //  $data_Rendezvous = $this->cache->get('Rendezvous_3', function () {
  241.         //$data_Rendezvous = $this->em->getRepository(Rendezvous::class)->findUpcomingRendezVousByCentre($centre_id, $bornes_recherche['debut'], $bornes_recherche['fin']);
  242.         $data_Rendezvous $this->em->getRepository(Rendezvous::class)->findUpcomingRendezVousByCentreDate($this->id$bornes_recherche['debut'], $bornes_recherche['fin']);
  243.         //     return $data_Rendezvous;
  244.         //   });
  245.         // dd($data_Rendezvous , $data_Rendezvous_all);
  246.         /****************************************
  247.         Récupération des blocages
  248.          ****************************************/
  249.         // $data_LigneBlocage = $this->cache->get('LigneBlocage_3_1', function () {
  250.         //$data_LigneBlocage = $this->em->getRepository(LigneBlocage::class)->findByCentre($this->id, $data_centre->getCentreType()->getId(), $bornes_recherche['debut'], $bornes_recherche['fin']);
  251.         $data_LigneBlocage $this->em->getrepository(LigneBlocage::class)->findUpcomingBlocageByCentreGroupeIdAndDates($this->id$bornes_recherche['debut'], $bornes_recherche['fin']);
  252.         //     return $data_LigneBlocage;
  253.         //  });
  254.         $i 0;
  255.         $evtFin = new \DateTime();
  256.         foreach ($data_Rendezvous as $key => $rdv) {
  257.              $Indice array_search($rdv->getLigne()->getid(), array_column($data_Ligne'id'));
  258.             if($Indice || $Indice == 0){
  259.                 $evtFin = clone $rdv->getRdvDateHeure();
  260.                 $evtFin $evtFin->modify('+' $rdv->getRdvDuree() . ' minutes');
  261.                 $data_Ligne[$rdv->getLigne()->getid()]['evts'][$i] = ['type' => 'rdv''debut' => $rdv->getRdvDateHeure(), 'fin' => $evtFin];
  262.                 $i++;
  263.             }
  264.         }
  265.         foreach ($data_LigneBlocage as $key => $blocage) {
  266.              $Indice array_search($blocage->getLigne()->getid(), array_column($data_Ligne'id'));
  267.             if($Indice || $Indice == 0){
  268.                 $data_Ligne[$blocage->getLigne()->getid()]['evts'][$i] = ['type' => 'bl''debut' => $blocage->getBlcDebut(), 'fin' => $blocage->getBlcFin()];
  269.                 $i++;
  270.             }
  271.         }
  272.         /****************************************
  273.         Récupération de la liste des demi-journées
  274.          *****************************************/
  275.         $demijournees = array();
  276.         $demijournee = clone $bornes_recherche['debut'];
  277.         while ($demijournee <= $bornes_recherche['fin']) {
  278.             $demijournees[] = array(
  279.                 'date' => $demijournee->format('Y-m-d'),
  280.                 'jour' => $this->jours[$demijournee->format('N') - 1],
  281.                 'periode' => 'matin',
  282.             );
  283.             $demijournees[] = array(
  284.                 'date' => $demijournee->format('Y-m-d'),
  285.                 'jour' => $this->jours[$demijournee->format('N') - 1],
  286.                 'periode' => 'apres_midi',
  287.             );
  288.             $demijournee->modify('+ 1 day');
  289.         }
  290.         //$holidays = $this->apiController->getFormateHolidays($data_centre->getCtrParametreCentre()->getHolidays(), $bornes_recherche['debut']->format('Y'));
  291.         /****************************************
  292.         Récupération des horaires d'ouverture
  293.          ****************************************/
  294.         $centres $this->em->getRepository(Centre::class)->findBy(['centre_groupe' => $this->id'centre_type' => 1]);
  295.         if (!$centres) {
  296.             $centres $this->em->getRepository(Centre::class)->findBy(['centre_groupe' => $this->id'centre_type' => 2]);
  297.         }
  298.         if (!$centres) {
  299.             $centres $this->em->getRepository(Centre::class)->findBy(['centre_groupe' => $this->id'centre_type' => 4]);
  300.         }
  301.         foreach ($centres as $key => $centre) {
  302.             $horaires $this->em->getRepository(CentreHoraire::class)->getHoraires($centre->getid());
  303.             foreach ($demijournees as $key => $demijournee) {
  304.                 $objet $horaires[$demijournee['jour']][$demijournee['periode']];
  305.                 $demijournees[$key]['ouverture'] = DateTime::createFromFormat('Y-m-d H:i'$demijournee['date'] . ' ' $objet['ouverture']->format('H:i'));
  306.                 $demijournees[$key]['fermeture'] = DateTime::createFromFormat('Y-m-d H:i'$demijournee['date'] . ' ' $objet['fermeture']->format('H:i'));
  307.                 $demijournees[$key]['ouvert'] = $objet['ouvert'];
  308.                 // if (in_array($demijournee['date'], $holidays)) {
  309.                 //     $demijournees[$key]['ouvert'] = false;
  310.                 // }
  311.                 $demijournees[$key]['jourNumber'] = DateTime::createFromFormat('Y-m-d H:i'$demijournee['date'] . ' ' $objet['ouverture']->format('H:i'))->format('N');
  312.                 $demijournees[$key]['journeeContinue'] = $objet['journeeContinue'];
  313.             }
  314.         }
  315.         /**********************************
  316.         Liste des rendez-vous disponibles
  317.          ***********************************/
  318.         $creneaux = array();
  319.         $hourEndBlockRdv null;
  320.         $hourStartBlockRdv null;
  321.         $hourBeforeBlock =  null;
  322.         if ($data_centre->getCtrParametreCentre()->isIsBlockRdv()) {
  323.             //$nbHoursBlockRdv=$sous_centre->getConfiguration()->getNbHoursBlockRdv();
  324.             $hourEndBlockRdv = new \DateTime();
  325.             $hourEndBlockRdv->setTime($data_centre->getCtrParametreCentre()->getHourStartBlockRdv(), 00);
  326.             $hourEndBlockRdv->modify('+ ' $data_centre->getCtrParametreCentre()->getNbHoursBlockRdv() . ' hours');
  327.             $hourStartBlockRdv = new \DateTime();
  328.             $hourStartBlockRdv->setTime($data_centre->getCtrParametreCentre()->getHourStartBlockRdv(), 00);
  329.             if ($data_centre->getCtrParametreCentre()->getNbHoursBeforeBlockRdv()) {
  330.                 $hourBeforeBlock = new \DateTime();
  331.                 $hourBeforeBlock->modify('+ ' $data_centre->getCtrParametreCentre()->getNbHoursBeforeBlockRdv() . ' hours');
  332.             }
  333.         }
  334.         foreach ($demijournees as $demijournee) {
  335.             //on verifie si la journee est un journée chomée
  336.             if (in_array($demijournee['date'], $holidays)) {
  337.                 continue;
  338.             }
  339.             $heure = clone $demijournee['ouverture'];
  340.             $dernier_creneau = clone $demijournee['fermeture'];
  341.             $dernier_creneau->modify('- ' $duree ' minutes');
  342.             foreach ($data_Ligne as $key => $ligne) {
  343.                 $periode $demijournee['periode'] == 'matin' 'am' 'pm';
  344.                 //on test si la ligne ouvre avant l'ouverture du centre au public
  345.                 if ($demijournee['ouverture']->format('Hi') > $ligne["horaires"][$demijournee['jourNumber']][$periode]['ouverture']) {
  346.                     $heure = clone $demijournee['ouverture'];
  347.                 } else {
  348.                     $heure DateTime::createFromFormat('Y-m-d Hi'$demijournee['date'] . ' ' $ligne["horaires"][$demijournee['jourNumber']][$periode]['ouverture']);
  349.                 }
  350.                 $dernier_creneau_ligne DateTime::createFromFormat('Y-m-d Hi'$demijournee['date'] . ' ' $ligne["horaires"][$demijournee['jourNumber']][$periode]['fermeture']);
  351.                 if ($ligne["horaires"][$demijournee['jourNumber']][$periode]['fermeture'] == "") {
  352.                     $dernier_creneau_ligne DateTime::createFromFormat('Y-m-d Hi'$demijournee['date'] . ' 0000');
  353.                 }
  354.                 $dernier_creneau_ligne->modify('- ' $duree ' minutes');
  355.                 $w 0;
  356.                 while (($demijournee['journeeContinue'] and $periode == 'pm' and $heure <= $dernier_creneau) or ($heure <= $dernier_creneau and $heure <= $dernier_creneau_ligne)) {
  357.                     if (isset($creneau[$heure->getTimestamp()])) {
  358.                         $heure $heure->modify('+ ' $duree ' minutes');
  359.                     } else {
  360.                         $fin = clone $heure;
  361.                         $fin->modify('+ ' $duree ' minutes');
  362.                         /***********************************
  363.                         Evenements existant (rdv et blc)
  364.                          ***********************************/
  365.                         $creneau_disponible true;
  366.                         if ($demijournee['journeeContinue']) {
  367.                             if ($heure $bornes_recherche['debut'] or ($periode == 'pm' and $fin $dernier_creneau)) {
  368.                                 $creneau_disponible false;
  369.                                 break;
  370.                             }
  371.                         } else {
  372.                             if ($heure $bornes_recherche['debut']) {
  373.                                 $creneau_disponible false;
  374.                             }
  375.                         }
  376.                         usort($ligne['evts'], function ($a$b) {
  377.                             return $a['debut'] <=> $b['debut'];
  378.                         });
  379.                         foreach ($ligne['evts'] as $key_evt => $evt) {
  380.                             if ($this->apiController->creneauIsInBetween($evt['debut'], $evt['fin'], $heure$fin)) {
  381.                                 $creneau_disponible false;
  382.                                 $fin = clone $evt['fin'];
  383.                                 break;
  384.                             }
  385.                         }
  386.                         $now = new \DateTime();
  387.                         if ($data_centre->getCtrParametreCentre()->isIsBlockRdv() and $now >= $hourStartBlockRdv and $heure >= $hourStartBlockRdv and $heure $hourEndBlockRdv) {
  388.                             $creneau_disponible false;
  389.                         }
  390.                         if ($data_centre->getCtrParametreCentre()->isIsBlockRdv() and  $hourBeforeBlock $heure ) {
  391.                             $creneau_disponible false;
  392.                         }
  393.                         if (!$data_centre->getCtrParametreCentreAdmin()->isPcaCalendrierRemplirTrou()) {
  394.                             $fin = clone $heure;
  395.                             $fin->modify('+ ' $duree ' minutes');
  396.                         }
  397.                         if ($creneau_disponible && (($centre_type_id == && $ligne['isVl']) || ($centre_type_id == && $ligne['isPl']) || ($centre_type_id == && $ligne['isCl']))) {
  398.                             $Lignes $this->em->getrepository(Ligne::class)->findByLigneDisponible($data_centre->getCentreGroupe()->getid(), $heure$fin$centre_type_id);
  399.                             if ($Lignes) {
  400.                                 $creneaux[$heure->getTimestamp()] = clone $heure;
  401.                             }
  402.                             $end = clone $heure;
  403.                             $end->modify('+ ' $duree ' minutes');
  404.                             $events[] = [
  405.                                 'resourceId' => $ligne['id'],
  406.                                 'title' => '',
  407.                                 'start' => $heure->format('Y-m-d H:i:s'),
  408.                                 'end' => $end->format('Y-m-d H:i:s'),
  409.                                 'backgroundColor' => '#ffffff',
  410.                                 'extendedProps' => [
  411.                                     'rdvDispo' => true,
  412.                                     'ligneId' => $ligne['id'],
  413.                                     'isVl' => $ligne['isVl'],
  414.                                     'isPl' => $ligne['isPl'],
  415.                                     'isCl' => $ligne['isCl'],
  416.                                 ],
  417.                             ];
  418.                             // }
  419.                         }
  420.                         $heure = clone $fin;
  421.                     }
  422.                     $w++;
  423.                 }
  424.             }
  425.         }
  426.         return $events;
  427.     }
  428.     /**
  429.      * @Route("/administration/login", name="administrationlogin")
  430.      */
  431.     public function administrationlogin(): Response
  432.     {
  433.         return $this->redirectToRoute('calendrier');
  434.     }
  435. // Gestion des Fonctions Admin -------------------------------------------------------
  436.     private function getCleanEnergies($energiesCentre)
  437.     {
  438.         $cleanEnergies = [];
  439.         $denominations = [];
  440.         foreach ($energiesCentre as $entry) {
  441.             foreach ($entry['energies'] as $energy) {
  442.                 $denominations[] = $energy;
  443.             }
  444.         }
  445.         $denominations array_unique($denominations);
  446.         $data_energies $this->em->getRepository(Energie::class)->findBy(['denomination' => $denominations]);
  447.         foreach ($data_energies as $data_energie) {
  448.             $cleanEnergies[] = $data_energie;
  449.         }
  450.         return $cleanEnergies;
  451.     }
  452.     /**
  453.      * @return string
  454.      */
  455.     private function decrypt_encrypt($action$string)
  456.     {
  457.         $output false;
  458.         $encrypt_method "AES-256-CBC";
  459.         $secret_key 'This is my secret key';
  460.         $secret_iv 'This is my secret iv';
  461.         // hash
  462.         $key hash('sha256'$secret_key);
  463.         // iv - encrypt method AES-256-CBC expects 16 bytes - else you will get a warning
  464.         $iv substr(hash('sha256'$secret_iv), 016);
  465.         if ($action == 'encrypt') {
  466.             $output openssl_encrypt($string$encrypt_method$key0$iv);
  467.             $output base64_encode($output);
  468.         } else if ($action == 'decrypt') {
  469.             $output openssl_decrypt(base64_decode($string), $encrypt_method$key0$iv);
  470.         }
  471.         return $output;
  472.     }
  473.     private function checkUserAccessToCentre($id_centre)
  474.     {
  475.         $user $this->getUser();
  476.         $centreGlobalArray = [];
  477.         /** @var UtilisateurInfo $info */
  478.         foreach ($user->getUtilisateurInfos() as $info) {
  479.             $centreGlobalArray[] = $info->getUtlInfFonction()->getCentreGroupe()->getId();
  480.         }
  481.         if (!$user) {
  482.             $this->addFlash('error''Vous devez être connecté pour accéder à cette ressource!');
  483.             return $this->redirectToRoute('admin_login');
  484.         }
  485.         $userCentreGroupe $user->getCentreGroupe();
  486.         if ($user->getUtlUsername() == 'AbsSuperAdmin') {
  487.         } else if (!$userCentreGroupe) {
  488.             $this->addFlash('error''Votre utilisateur n\'est associé à aucun groupe de centres!');
  489.             return $this->redirectToRoute('admin_erreur');
  490.         }
  491.         $centre $this->em->getRepository(Centre::class)->find($id_centre);
  492.         if (!$centre) {
  493.             $this->addFlash('error''Centre introuvable!');
  494.             return $this->redirectToRoute('admin_erreur');
  495.         }
  496.         if ($user->getUtlUsername() == 'AbsSuperAdmin') {
  497.         } else if (!in_array($centre->getCentreGroupe()->getId(), $centreGlobalArray)) {
  498.             $this->addFlash('error''Impossible, vous n\'avez pas accès à ce centre!');
  499.             return $this->redirectToRoute('admin_erreur');
  500.         }
  501.         return true;
  502.     }
  503.     private function checkPermissionAdmin($typeDroit$route)
  504.     {
  505.         $user $this->getUser();
  506.         $centreGlobalArray = [];
  507.         /** @var UtilisateurInfo $info */
  508.         foreach ($user->getUtilisateurInfos() as $info) {
  509.             $centreGlobalArray[] = $info->getUtlInfFonction()->getCentreGroupe()->getId();
  510.         }
  511.         if ($user->getUtlUsername() == 'AbsSuperAdmin') {
  512.         } else if (!in_array($this->id$centreGlobalArray)) {
  513.             $this->addFlash('error''Impossible, vous n\'avez pas accés à ce centre!');
  514.             return $this->redirectToRoute('admin_erreur');
  515.         }
  516.         $droits $this->session->get('droits' $user->getId());
  517.         foreach ($droits as $droit) {
  518.             $page $droit->getDrtPage();
  519.             if ($page && $page->getPgeRoute() == $route) {
  520.                 switch ($typeDroit) {
  521.                     case 'lire':
  522.                         $drtDroitLire $droit->isDrtLire();
  523.                         if (!$drtDroitLire) {
  524.                             $this->addFlash('error''Impossible, vous n\'avez pas accés à cette page');
  525.                             return $this->redirectToRoute('admin_erreur');
  526.                         }
  527.                         break;
  528.                     case 'ecrire':
  529.                         $drtDroitEcrire $droit->isDrtEcrire();
  530.                         if (!$drtDroitEcrire) {
  531.                             $this->addFlash('error''Impossible, vous n\'avez pas accés à l\'écriture sur cette page');
  532.                             return $this->redirectToRoute('admin_erreur');
  533.                         }
  534.                         break;
  535.                     case 'supp':
  536.                         $drtDroitSupp $droit->isDrtSuppression();
  537.                         if (!$drtDroitSupp) {
  538.                             $this->addFlash('error''Impossible, vous n\'avez pas accés à la suppression sur cette page');
  539.                             return $this->redirectToRoute('admin_erreur');
  540.                         }
  541.                         break;
  542.                 }
  543.                 break;
  544.             }
  545.         }
  546.         return true;
  547.     }
  548.     private function checkAllPermissionAdmin($route)
  549.     {
  550.         $user $this->getUser();
  551.         $centreGlobalArray = [];
  552.         /** @var UtilisateurInfo $info */
  553.         foreach ($user->getUtilisateurInfos() as $info) {
  554.             $centreGlobalArray[] = $info->getUtlInfFonction()->getCentreGroupe()->getId();
  555.         }
  556.         if ($user->getUtlUsername() == 'AbsSuperAdmin') {
  557.         } else if (!in_array($this->id$centreGlobalArray)) {
  558.             $this->addFlash('error''Impossible, vous n\'avez pas accés à ce centre!');
  559.             return $this->redirectToRoute('admin_erreur');
  560.         }
  561.         $droits $this->session->get('droits' $user->getId());
  562.         $drtDroit = array();
  563.         foreach ($droits as $droit) {
  564.             $page $droit->getDrtPage();
  565.             if ($page && $page->getPgeRoute() == $route) {
  566.                 $drtDroit = [
  567.                     'lire' => $droit->isDrtLire(),
  568.                     'ecrire' => $droit->isDrtEcrire(),
  569.                     'supp' => $droit->isDrtSuppression(),
  570.                 ];
  571.                 break;
  572.             }
  573.         }
  574.         if (!$drtDroit) {
  575.             $drtDroit = [
  576.                 'lire' => false,
  577.                 'ecrire' => false,
  578.                 'supp' => false,
  579.             ];
  580.         }
  581.         return $drtDroit;
  582.     }
  583.     /**
  584.      * @Route("/admin/attestation_rendez_vous/{id}", name="attestation_rendez_vous")
  585.      */
  586.     public function attestation_rendez_vous(RendezVous $RendezVous)
  587.     {
  588.         // $RendezVous = $this->em->getRepository(RendezVous::class)->find(1367310);
  589.         // Configure Dompdf according to your needs
  590.         $pdfOptions = new Options();
  591.         $pdfOptions->set('defaultFont''Arial');
  592.         $pdfOptions->set('isRemoteEnabled'true);
  593.         // $pdfOptions->set('chroot', [$this->getParameter('Directory')]);
  594.         // Instantiate Dompdf with our options
  595.         $dompdf = new Dompdf($pdfOptions);
  596.         // return $this->render('admin/template/confirmation_rdv.html.twig', [
  597.         $html $this->renderView('admin/template/confirmation_rdv.html.twig', [
  598.             'rdv' => $RendezVous,
  599.         ]);
  600.         $dompdf->loadHtml($html);
  601.         // (Optional) Setup the paper size and orientation 'portrait' or 'portrait'
  602.         $dompdf->setPaper('A4''portrait');
  603.         // Render the HTML as PDF
  604.         $dompdf->render();
  605.         $dompdf->stream('confirmation_rdv.pdf', array('Attachment' => 0));
  606.         // $output = $dompdf->output();
  607.         // $path = 'uploads/'.$RendezVous->getCentre()->getId();
  608.         // if (!file_exists($path)) {
  609.         //     mkdir($path, 0777, true);
  610.         // }
  611.         // file_put_contents($path.'/confirmation_rdv.pdf', $output);
  612.         // return new JsonResponse($path.'/confirmation_rdv.pdf');
  613.         return new JsonResponse('ok');
  614.     }
  615. // Gestion du tableau de bord -----------------------------------------------------
  616.     /**
  617.      * @Route("/admin/dashboard", name="dashboard")
  618.      */
  619.     public function dashboard(SessionInterface $session)
  620.     {
  621.         $thisCentreGroupe $this->em->getrepository(CentreGroupe::class)->find($this->id);
  622.         $permissionResult $this->checkPermissionAdmin("lire""dashboard");
  623.         $allpermission $this->checkAllPermissionAdmin("dashboard");
  624.         if ($permissionResult instanceof RedirectResponse) {
  625.             return $permissionResult;
  626.         }
  627.         $nbr_client_compte $this->em->getrepository(ClientCompte::class)->countClientCompteByCentreGroupe($this->id);
  628.         $centreTypesId $this->em->getrepository(CentreType::class)->findTypesIdByCentreGroupeId($this->id);
  629.         return $this->render('admin/dashboard.html.twig', [
  630.             'centre_groupe_name' => $thisCentreGroupe->getCgNom(),
  631.             'nbr_client_compte' => $nbr_client_compte,
  632.             'centreTypesId' => $centreTypesId,
  633.         ]);
  634.     }
  635.     /**
  636.      * @Route("/admin/chartData", name="chartData")
  637.      */
  638.     public function chartData(Request $request)
  639.     {
  640.         $periodStart = [
  641.             "3year" => "-3 year",
  642.             "year" => "-1 year",
  643.             "month" => "-1 month",
  644.             "week" => "-1 week",
  645.             "day" => "-1 day",
  646.         ];
  647.         $periodMaChartStart = [
  648.             "3year" => "-3 year",
  649.             "year" => "-1 year",
  650.             "month" => "-1 month",
  651.             "week" => "-1 week",
  652.             "day" => "-2 day",
  653.         ];
  654.         $periodMaChartEnd = [
  655.             "3year" => "0 year",
  656.             "year" => "0 year",
  657.             "month" => "0 month",
  658.             "week" => "0 week",
  659.             "day" => "+1 day",
  660.         ];
  661.         $period $request->get('period');
  662.         $affichage $request->get('affichage');
  663.         $endTime = new \DateTime();
  664.         $endTime->setTime(235959);
  665.         $startTimeChart = clone $endTime;
  666.         $startTime = clone $endTime;
  667.         $endTimeChart = clone $endTime;
  668.         if (array_key_exists($period$periodMaChartStart)) {
  669.             $startTime->modify($periodStart[$period]);
  670.             $startTimeChart->modify($periodMaChartStart[$period]);
  671.             $endTimeChart->modify($periodMaChartEnd[$period]);
  672.         } else {
  673.             $dateRange explode('/'$period);
  674.             if (count($dateRange) == 2) {
  675.                 $startTime = new \DateTime($dateRange[0]);
  676.                 $endTime = new \DateTime($dateRange[1]);
  677.                 $endTime->setTime(235959);
  678.                 $startTimeChart = clone $startTime;
  679.                 $endTimeChart = clone $endTime;
  680.             } else {
  681.                 throw new \Exception("Format de période non valide");
  682.             }
  683.         }
  684.         $rendezvousPeriod = [];
  685.         $rendezvousPeriodMercureRdv = [];
  686.         $formatter = new IntlDateFormatter('fr_FR'IntlDateFormatter::FULLIntlDateFormatter::FULL);
  687.         if ($period == 'year') {
  688.             $formatter->setPattern('MMMM yyyy');
  689.         } else if ($period == 'month') {
  690.             $formatter->setPattern('dd MMMM yyyy');
  691.         } else if ($period == 'week') {
  692.             $formatter->setPattern('dd MMMM yyyy');
  693.         } else if ($period == 'day') {
  694.             $formatter->setPattern('dd MMMM yyyy');
  695.         } else if ($period == '3year') {
  696.             $formatter->setPattern('yyyy');
  697.         } else {
  698.             if ($affichage == 'day') {
  699.                 $formatter->setPattern('dd MMMM yyyy');
  700.             } else if ($affichage == 'month') {
  701.                 $formatter->setPattern('MMMM yyyy');
  702.             } else if ($affichage == 'year') {
  703.                 $formatter->setPattern('yyyy');
  704.             }
  705.         }
  706.         $rendezvousDates $this->em->getrepository(Rendezvous::class)->getAllRendezvousByCentreGroupeAndTime($this->id$startTimeChart$endTimeChart);
  707.         $rendezvousDatesMercureRdv $this->em->getrepository(Rendezvous::class)->getAllRendezvousByPartenaireAndTime($this->id2$startTimeChart$endTimeChart);
  708.         $rendezvousPeriod = [];
  709.         foreach ($rendezvousDates as $dateArray) {
  710.             $date $dateArray['rdv_date_heure'];
  711.             $datePeriod $formatter->format($date);
  712.             if (!isset($rendezvousPeriod[$datePeriod])) {
  713.                 $rendezvousPeriod[$datePeriod] = 0;
  714.             }
  715.             $rendezvousPeriod[$datePeriod]++;
  716.         }
  717.         $labels array_keys($rendezvousPeriod);
  718.         $dataRdvByPeriod array_values($rendezvousPeriod);
  719.         $rendezvousPeriodMercureRdv = [];
  720.         foreach ($rendezvousDatesMercureRdv as $dateArray) {
  721.             $date $dateArray['rdv_date_heure'];
  722.             $datePeriod $formatter->format($date);
  723.             if (!isset($rendezvousPeriodMercureRdv[$datePeriod])) {
  724.                 $rendezvousPeriodMercureRdv[$datePeriod] = 0;
  725.             }
  726.             $rendezvousPeriodMercureRdv[$datePeriod]++;
  727.         }
  728.         $dataRdvByMonthByPeriod = [];
  729.         foreach ($labels as $label) {
  730.             if (isset($rendezvousPeriodMercureRdv[$label])) {
  731.                 $dataRdvByMonthByPeriod[] = $rendezvousPeriodMercureRdv[$label];
  732.             } else {
  733.                 $dataRdvByMonthByPeriod[] = 0;
  734.             }
  735.         }
  736.         $nbr_rendezvous_total $this->em->getrepository(Rendezvous::class)->findRendezvousByCentreGroupeAndTime($this->id$startTime$endTime);
  737.         $nbr_rendezvous_total_by_centre_type $this->em->getrepository(Rendezvous::class)->findRendezvousCountByCentreTypeAndTime($this->id$startTime$endTime);
  738.         $nbr_rendezvous_partenaire $this->em->getrepository(RendezVous::class)->countRendezvousByCentrePartenaireAndDateRange($this->id2$startTime$endTime);
  739.         $nbr_rendezvous_paiement_ligne $this->em->getrepository(RendezVous::class)->countRendezvousByPaiementLigneAndDateRange($this->id$startTime$endTime);
  740.         $somme_rendezvous_paiement_ligne $this->em->getrepository(RendezVous::class)->getSommeRendezvousByPaiementLigneAndDateRange($this->id$startTime$endTime);
  741.         $nbr_sms_envoye $this->em->getrepository(Sms::class)->countSmsByCentreGroupAndDateRangeAndNbEnvoi($this->id$startTime$endTime);
  742.         $nbr_sms_relance $this->em->getrepository(Sms::class)->countSmsByCentreGroupAndDateRangeAndRelance($this->id$startTime$endTime);
  743.         if ($somme_rendezvous_paiement_ligne == null) {
  744.             $somme_rendezvous_paiement_ligne 0;
  745.         }
  746.         $response = new JsonResponse([
  747.             'labels' => $labels,
  748.             'dataRdvByPeriod' => $dataRdvByPeriod,
  749.             'dataRdvByMonthByPeriod' => $dataRdvByMonthByPeriod,
  750.             'nbr_rendezvous_total' => $nbr_rendezvous_total,
  751.             'nbr_rendezvous_total_by_centre_type' => $nbr_rendezvous_total_by_centre_type,
  752.             'nbr_rendezvous_partenaire' => $nbr_rendezvous_partenaire,
  753.             'nbr_rendezvous_paiement_ligne' => $nbr_rendezvous_paiement_ligne,
  754.             'somme_rendezvous_paiement_ligne' => number_format($somme_rendezvous_paiement_ligne0''' '),
  755.             'nbr_sms_envoye' => $nbr_sms_envoye,
  756.             'nbr_sms_relance' => $nbr_sms_relance,
  757.         ]);
  758.         return $response;
  759.     }
  760. // Gestion Prestation -------------------------------------------------------------
  761.     /**
  762.      * @Route("/admin/prestation", name="prestation")
  763.      */
  764.     public function prestation(): Response
  765.     {
  766.         $allpermission $this->checkAllPermissionAdmin("prestation");
  767.         if (!$allpermission || !$allpermission['lire']) {
  768.             $this->addFlash('error''Impossible, vous n\'avez pas accés à cette page');
  769.             return $this->redirectToRoute('admin_erreur');
  770.         }
  771.         $data_prestations $this->cache->get('prestation' $this->id, function () {
  772.             $data_prestations $this->em->getrepository(CentrePrestation::class)->findByCentreGroupe($this->id);
  773.             return $data_prestations;
  774.         });
  775.         $data_type_visites $this->cache->get('type_visite' $this->id, function () {
  776.             $data_type_visite $this->em->getrepository(TypeVisite::class)->findByCentreGroupe($this->id);
  777.             return $data_type_visite;
  778.         });
  779.         $data_type_vehicules $this->cache->get('type_vehicule' $this->id, function () {
  780.             $data_type_vehicule $this->em->getrepository(TypeVehicule::class)->findByCentreGroupe($this->id);
  781.             return $data_type_vehicule;
  782.         });
  783.         $data_centre_types $this->cache->get("centre_type" $this->id, function () {
  784.             $data_centre_types $this->em->getrepository(CentreType::class)->findTypesByCentreGroupeId($this->id);
  785.             return $data_centre_types;
  786.         });
  787.         $data_payment_webs $this->em->getrepository(ParametreCentre::class)->findPaiementLigneByCentreGroupe($this->id);
  788.         $allPaymentsOffline true;
  789.         foreach ($data_payment_webs as $data_payment_web) {
  790.             if ($data_payment_web['paiement_en_ligne'] === true) {
  791.                 $allPaymentsOffline false;
  792.                 break;
  793.             }
  794.         }
  795.         // $prestations = $paginator->paginate(
  796.         //     $data_prestations, // Requête contenant les données à paginer (ici nos prestations)
  797.         //     $request->query->getInt('page', 1), // Numéro de la page en cours, passé dans l'URL, 1 si aucune page
  798.         //     10 // Nombre de résultats par page
  799.         // );
  800.         return $this->render('admin/prestation_view.html.twig', [
  801.             'prestations' => $data_prestations,
  802.             'type_visites' => $data_type_visites,
  803.             'type_vehicules' => $data_type_vehicules,
  804.             'centre_types' => $data_centre_types,
  805.             'allpermission' => $allpermission,
  806.             'paymentWebs' => $data_payment_webs,
  807.             'allPaymentsOffline' => $allPaymentsOffline,
  808.         ]);
  809.     }
  810.     /**
  811.      * @Route("/admin/prestation_add", name="prestation_add")
  812.      */
  813.     public function prestation_add(Request $requestObjectManager $manager)
  814.     {
  815.         $permissionResult $this->checkPermissionAdmin("ecrire""prestation");
  816.         if ($permissionResult instanceof RedirectResponse) {
  817.             return $permissionResult;
  818.         }
  819.         if (!$request->get('type_visite')) {
  820.             $this->addFlash('error''Vous n\'avez pas rempli le type de visite.');
  821.             return $this->redirectToRoute('prestation');
  822.         }
  823.         if (!$request->get('type_vehicule')) {
  824.             $this->addFlash('error''Vous n\'avez pas rempli le type de vehicule.');
  825.             return $this->redirectToRoute('prestation');
  826.         }
  827.         if (!$request->get('tarif')) {
  828.             $this->addFlash('error''Vous n\'avez pas rempli le tarif.');
  829.             return $this->redirectToRoute('prestation');
  830.         }
  831.         if (!$request->get('duree')) {
  832.             $this->addFlash('error''Vous n\'avez pas rempli la duree.');
  833.             return $this->redirectToRoute('prestation');
  834.         }
  835.         if (!$request->get('energies')) {
  836.             $this->addFlash('error''Vous n\'avez pas sélectionné d\'energie.');
  837.             return $this->redirectToRoute('prestation');
  838.         }
  839.         $prestation = new CentrePrestation;
  840.         $type_visite $this->em->getrepository(TypeVisite::class)->find($request->get('type_visite'));
  841.         $prestation->setPstTypeVisite($type_visite);
  842.         $type_vehicule $this->em->getrepository(TypeVehicule::class)->find($request->get('type_vehicule'));
  843.         $prestation->setPstTypeVehicule($type_vehicule);
  844.         $centre_groupe $this->em->getrepository(CentreGroupe::class)->find($this->id);
  845.         $prestation->setCentreGroupe($centre_groupe);
  846.         $prestation->setPstTarif($request->get('tarif'));
  847.         $prestation->setPstDuree($request->get('duree'));
  848.         $prestation->setPstActif($request->get('actif') ? 0);
  849.         $prestation->setPstAfficher($request->get('presta') ? 0);
  850.         $prestation->setPaiementEnLigne($request->get('paiement') ? 0);
  851.         $prestation->setMessageAppelCentre($request->get('appel_centre') ? 0);
  852.         $prestation->setPstCouleur(substr($request->get('couleur'), 1) ? substr($request->get('couleur'), 1) : null);
  853.         $prestation->setPstOrdre($request->get('ordre') ? $request->get('ordre') : null);
  854.         foreach ($request->get('energies') as $energie) {
  855.             $data_energie $this->em->getRepository(Energie::class)->findOneBy(['denomination' => $energie]);
  856.             $prestation->addEnergie($data_energie);
  857.         }
  858.         $manager->persist($prestation);
  859.         $manager->flush();
  860.         $this->cache->delete('prestation' $this->id'promotion_prestation' $this->id'coupon_promotion_prestation' $this->id'prestation_actif' $this->id);
  861.         $this->vide_cache_centre_groupe($this->id);
  862.         return $this->redirectToRoute('prestation');
  863.     }
  864.     /**
  865.      * @Route("/admin/prestation_delete/{id}", name="prestation_delete")
  866.      */
  867.     public function prestation_delete(centrePrestation $centrePrestationObjectManager $manager)
  868.     {
  869.         $permissionResult $this->checkPermissionAdmin("supp""prestation");
  870.         if ($permissionResult instanceof RedirectResponse) {
  871.             return $permissionResult;
  872.         }
  873.         if ($centrePrestation->getCentreGroupe()->getId() !== $this->id) {
  874.             return new Response('cannot_delete_prestation_another_center');
  875.         }
  876.         if (count($centrePrestation->getRendezVousInfos())) {
  877.             return new Response('cannot_delete_due_to_existing_appointments');
  878.         } else {
  879.             // Supprimer l'entité
  880.             foreach ($centrePrestation->getEnergie() as $energie) {
  881.                 $centrePrestation->removeEnergie($energie);
  882.             }
  883.             $manager->remove($centrePrestation);
  884.             $manager->flush();
  885.             $this->cache->delete('prestation' $this->id'promotion_prestation' $this->id'coupon_promotion_prestation' $this->id'prestation_actif' $this->id);
  886.             $this->vide_cache_centre_groupe($this->id);
  887.             // Rediriger l'utilisateur vers la liste des produits
  888.             return new Response('ok');
  889.         }
  890.     }
  891.     /**
  892.      * @Route("/admin/prestation_update/{id}", name="prestation_update")
  893.      */
  894.     public function prestation_update(centrePrestation $centrePrestationRequest $requestObjectManager $manager)
  895.     {
  896.         $permissionResult $this->checkPermissionAdmin("ecrire""prestation");
  897.         if ($permissionResult instanceof RedirectResponse) {
  898.             return $permissionResult;
  899.         }
  900.         if ($centrePrestation->getCentreGroupe()->getId() !== $this->id) {
  901.             $this->addFlash('error'"Impossible de mettre à jour la prestation car elle n'est pas liée à votre centre.");
  902.             return $this->redirectToRoute('prestation');
  903.         }
  904.         if (!$request->get('type_visite')) {
  905.             $this->addFlash('error''Vous n\'avez pas rempli le type de visite.');
  906.             return $this->redirectToRoute('prestation');
  907.         }
  908.         if (!$request->get('type_vehicule')) {
  909.             $this->addFlash('error''Vous n\'avez pas rempli le type de vehicule.');
  910.             return $this->redirectToRoute('prestation');
  911.         }
  912.         if (!$request->get('tarif')) {
  913.             $this->addFlash('error''Vous n\'avez pas rempli le tarif.');
  914.             return $this->redirectToRoute('prestation');
  915.         }
  916.         if (!$request->get('duree')) {
  917.             $this->addFlash('error''Vous n\'avez pas rempli la duree.');
  918.             return $this->redirectToRoute('prestation');
  919.         }
  920.         if (!$request->get('energies')) {
  921.             $this->addFlash('error''Vous n\'avez pas sélectionné d\'energie.');
  922.             return $this->redirectToRoute('prestation');
  923.         }
  924.         $type_visite $this->em->getrepository(TypeVisite::class)->find($request->get('type_visite'));
  925.         $centrePrestation->setPstTypeVisite($type_visite);
  926.         $type_vehicule $this->em->getrepository(TypeVehicule::class)->find($request->get('type_vehicule'));
  927.         $centrePrestation->setPstTypeVehicule($type_vehicule);
  928.         $centre_groupe $this->em->getrepository(CentreGroupe::class)->find($this->id);
  929.         $centrePrestation->setCentreGroupe($centre_groupe);
  930.         $centrePrestation->setPstTarif($request->get('tarif'));
  931.         $centrePrestation->setPstDuree($request->get('duree'));
  932.         $centrePrestation->setPstActif($request->get('actif') ? 0);
  933.         $centrePrestation->setPstAfficher($request->get('presta') ? 0);
  934.         $centrePrestation->setPaiementEnLigne($request->get('paiement') ? 0);
  935.         $centrePrestation->setMessageAppelCentre($request->get('appel_centre') ? 0);
  936.         $centrePrestation->setPstCouleur(substr($request->get('couleur'), 1));
  937.         $centrePrestation->setPstOrdre($request->get('ordre') ? $request->get('ordre') : null);
  938.         foreach ($centrePrestation->getEnergie() as $energie) {
  939.             $centrePrestation->removeEnergie($energie);
  940.         }
  941.         foreach ($request->get('energies') as $energie) {
  942.             $data_energie $this->em->getRepository(Energie::class)->findOneBy(['denomination' => $energie]);
  943.             if ($data_energie) {
  944.                 $centrePrestation->addEnergie($data_energie);
  945.             }
  946.         }
  947.         $manager->persist($centrePrestation);
  948.         $manager->flush();
  949.         $this->cache->delete('prestation' $this->id'promotion_prestation' $this->id'coupon_promotion_prestation' $this->id'prestation_actif' $this->id);
  950.         $this->vide_cache_centre_groupe($this->id);
  951.         return $this->redirectToRoute('prestation');
  952.     }
  953.     /**
  954.      * @Route("/admin/get-energie-prestation/{typeVehicule}", name="get-energie-prestation")
  955.      */
  956.     public function getEnergieByPrestation(TypeVehicule $typeVehicule)
  957.     {
  958.         $allpermission $this->checkAllPermissionAdmin("prestation");
  959.         if (!$allpermission || !$allpermission['ecrire']) {
  960.             $this->addFlash('error''Impossible, vous n\'avez pas accés à cette route');
  961.             return $this->redirectToRoute('admin_erreur');
  962.         }
  963.         if ($typeVehicule->getCentreGroupe()->getId() != $this->id) {
  964.             $this->addFlash('error''Impossible, vous n\'avez pas accés à cette route');
  965.             return $this->redirectToRoute('prestation');
  966.         }
  967.         $energies $this->em->getRepository(ParametreCentre::class)->findEnergiesByTypeVehicule($typeVehicule->getId());
  968.         $cleanEnergies = [];
  969.         foreach ($energies as $entry) {
  970.             foreach ($entry['energies'] as $energy) {
  971.                 $cleanEnergies[] = $energy;
  972.             }
  973.         }
  974.         return new JsonResponse($cleanEnergies);
  975.     }
  976. // Gestion Lignes -----------------------------------------------------------------
  977.     /**
  978.      * @Route("/admin/ligne", name="ligne")
  979.      */
  980.     public function ligne(Request $requestPaginatorInterface $paginator): Response
  981.     {
  982.         $allpermission $this->checkAllPermissionAdmin("ligne");
  983.         if (!$allpermission || !$allpermission['lire']) {
  984.             $this->addFlash('error''Impossible, vous n\'avez pas accés à cette page');
  985.             return $this->redirectToRoute('admin_erreur');
  986.         }
  987.         $data_lignes $this->cache->get("ligne" $this->id, function () {
  988.             $data_lignes $this->em->getrepository(Ligne::class)->findByCentreGroupe($this->id);
  989.             return $data_lignes;
  990.         });
  991.         $data_centre_types $this->cache->get("centre_type" $this->id, function () {
  992.             $data_centre_types $this->em->getrepository(CentreType::class)->findTypesByCentreGroupeId($this->id);
  993.             return $data_centre_types;
  994.         });
  995.         return $this->render('admin/ligne_view.html.twig', [
  996.             'lignes' => $data_lignes,
  997.             'centre_types' => $data_centre_types,
  998.             'allpermission' => $allpermission,
  999.         ]);
  1000.     }
  1001.     /**
  1002.      * @Route("/admin/ligne_add", name="ligne_add")
  1003.      */
  1004.     public function AddLigne(Request $requestObjectManager $manager)
  1005.     {
  1006.         $permissionResult $this->checkPermissionAdmin("ecrire""ligne");
  1007.         if ($permissionResult instanceof RedirectResponse) {
  1008.             return $permissionResult;
  1009.         }
  1010.         if (!$request->get('nom')) {
  1011.             $this->addFlash('error''Vous n\'avez pas rempli le nom de la ligne.');
  1012.             return $this->redirectToRoute('ligne');
  1013.         }
  1014.         if (!$request->get('type_prestation')) {
  1015.             $this->addFlash('error''Vous n\'avez pas rempli le type de prestation.');
  1016.             return $this->redirectToRoute('ligne');
  1017.         }
  1018.         $ligne = new Ligne();
  1019.         $centre_groupe $this->em->getrepository(CentreGroupe::class)->find($this->id);
  1020.         $ligne->setCentreGroupe($centre_groupe);
  1021.         $ligne->setLgnNom($request->get('nom'));
  1022.         $ligne->setLgnVl(false);
  1023.         $ligne->setLgnPl(false);
  1024.         $ligne->setLgnCl(false);
  1025.         $ligne->setColor(substr($request->get('couleur'), 1) ? substr($request->get('couleur'), 1) : null);
  1026.         foreach ($request->get('type_prestation') as $type_prestation) {
  1027.             if ($type_prestation == 'VL') {
  1028.                 $ligne->setLgnVl(true);
  1029.                 $centre_type $this->em->getrepository(CentreType::class)->find(1);
  1030.                 $ligne->setCentreType($centre_type);
  1031.             }
  1032.             if ($type_prestation == 'PL') {
  1033.                 $ligne->setLgnPl(true);
  1034.                 $centre_type $this->em->getrepository(CentreType::class)->find(2);
  1035.                 $ligne->setCentreType($centre_type);
  1036.             }
  1037.             if ($type_prestation == 'CL') {
  1038.                 $ligne->setLgnCl(true);
  1039.                 $centre_type $this->em->getrepository(CentreType::class)->find(4);
  1040.                 $ligne->setCentreType($centre_type);
  1041.             }
  1042.         }
  1043.         if (count($request->get('type_prestation')) > 1) {
  1044.             $centre_type $this->em->getrepository(CentreType::class)->find(3);
  1045.             $ligne->setCentreType($centre_type);
  1046.         }
  1047.         $ligne->setLgnActif($request->get('actif') ? 0);
  1048.         $manager->persist($ligne);
  1049.         $manager->flush();
  1050.         for ($i 1$i <= 7$i++) {
  1051.             $ligne_horaire_matin = new LigneHoraire;
  1052.             $ligne_horaire_matin->setLigne($ligne);
  1053.             $heure_debut = new Datetime('08:00');
  1054.             $heure_fin = new Datetime('12:00');
  1055.             $ligne_horaire_matin->setLgnHorDebut($heure_debut);
  1056.             $ligne_horaire_matin->setLgnHorFin($heure_fin);
  1057.             $ligne_horaire_matin->setLgnHorOuvert(true);
  1058.             $ligne_horaire_matin->setLgnHorListeJours($i);
  1059.             $manager->persist($ligne_horaire_matin);
  1060.             $ligne_horaire_apresmidi = new LigneHoraire;
  1061.             $ligne_horaire_apresmidi->setLigne($ligne);
  1062.             $heure_debut = new Datetime('14:00');
  1063.             $heure_fin = new Datetime('18:00');
  1064.             $ligne_horaire_apresmidi->setLgnHorDebut($heure_debut);
  1065.             $ligne_horaire_apresmidi->setLgnHorFin($heure_fin);
  1066.             $ligne_horaire_apresmidi->setLgnHorOuvert(true);
  1067.             $ligne_horaire_apresmidi->setLgnHorListeJours($i);
  1068.             $manager->persist($ligne_horaire_apresmidi);
  1069.             $manager->flush();
  1070.         }
  1071.         $this->cache->delete('ligne' $this->id);
  1072.         $this->cache->delete('nbr_ligne' $this->id);
  1073.         $this->vide_cache_centre_groupe($this->id);
  1074.         return $this->redirectToRoute('ligne');
  1075.     }
  1076.     /**
  1077.      * @Route("/admin/ligne_delete/{id}", name="ligne_delete")
  1078.      */
  1079.     public function deleteLigne(Ligne $ligneObjectManager $manager)
  1080.     {
  1081.         $permissionResult $this->checkPermissionAdmin("supp""ligne");
  1082.         if ($permissionResult instanceof RedirectResponse) {
  1083.             return $permissionResult;
  1084.         }
  1085.         if ($ligne->getCentreGroupe()->getId() !== $this->id) {
  1086.             return new Response('Vous ne pouvez pas supprimer, cette ligne appartient à un autre centre');
  1087.         }
  1088.         $dependantEntries $this->em->getrepository(Rendezvous::class)->findBy(['ligne' => $ligne]);
  1089.         if (count($dependantEntries) > 0) {
  1090.             return new Response('Impossible de supprimer la ligne car elle est liée à des rendez-vous');
  1091.         }
  1092.         $CentrePartenaires $this->em->getrepository(CentrePartenaire::class)->findBy(['ligne' => $ligne]);
  1093.         foreach ($CentrePartenaires as $CentrePartenaire) {
  1094.             $manager->remove($CentrePartenaire);
  1095.         }
  1096.         // Supprimer l'entité
  1097.         $manager->remove($ligne);
  1098.         $manager->flush();
  1099.         $this->cache->delete('ligne' $this->id);
  1100.         $this->cache->delete('nbr_ligne' $this->id);
  1101.         $this->vide_cache_centre_groupe($this->id);
  1102.         // Rediriger l'utilisateur vers le type ligne
  1103.         return new Response('ok');
  1104.     }
  1105.     /**
  1106.      * @Route("/admin/ligne_update/{id}", name="ligne_update")
  1107.      */
  1108.     public function updateLigne(Ligne $ligneRequest $requestObjectManager $manager)
  1109.     {
  1110.         $permissionResult $this->checkPermissionAdmin("ecrire""ligne");
  1111.         if ($permissionResult instanceof RedirectResponse) {
  1112.             return $permissionResult;
  1113.         }
  1114.         if ($ligne->getCentreGroupe()->getId() !== $this->id) {
  1115.             $this->addFlash('error'"Impossible de mettre à jour la ligne car elle n'est pas liée à votre centre.");
  1116.             return $this->redirectToRoute('ligne');
  1117.         }
  1118.         if (!$request->get('nom')) {
  1119.             $this->addFlash('error''Vous n\'avez pas rempli le nom de la ligne.');
  1120.             return $this->redirectToRoute('ligne');
  1121.         }
  1122.         if (!$request->get('type_prestation')) {
  1123.             $this->addFlash('error''Vous n\'avez pas rempli le type de prestation.');
  1124.             return $this->redirectToRoute('ligne');
  1125.         }
  1126.         //$centre_type = $this->em->getrepository(CentreType::class)->find(3);
  1127.         // TODO pour linstant nous avons besoin la ligne est un type pour les partenaires
  1128.         //  $ligne->setCentreType(null);
  1129.         $centre_groupe $this->em->getrepository(CentreGroupe::class)->find($this->id);
  1130.         $ligne->setCentreGroupe($centre_groupe);
  1131.         $ligne->setLgnNom($request->get('nom'));
  1132.         $ligne->setLgnActif($request->get('actif') ? 0);
  1133.         $ligne->setLgnVl(false);
  1134.         $ligne->setLgnPl(false);
  1135.         $ligne->setLgnCl(false);
  1136.         $ligne->setColor(substr($request->get('couleur'), 1) ? substr($request->get('couleur'), 1) : null);
  1137.         foreach ($request->get('type_prestation') as $type_prestation) {
  1138.             if ($type_prestation == 'VL') {
  1139.                 $ligne->setLgnVl(true);
  1140.             }
  1141.             if ($type_prestation == 'PL') {
  1142.                 $ligne->setLgnPl(true);
  1143.             }
  1144.             if ($type_prestation == 'CL') {
  1145.                 $ligne->setLgnCl(true);
  1146.             }
  1147.         }
  1148.         $manager->persist($ligne);
  1149.         $manager->flush();
  1150.         $this->cache->delete('ligne' $this->id);
  1151.         $this->cache->delete('nbr_ligne' $this->id);
  1152.         $this->vide_cache_centre_groupe($this->id);
  1153.         return $this->redirectToRoute('ligne');
  1154.     }
  1155.     /**
  1156.      * @Route("/admin/ligne_horaire/{id}", name="ligne_horaire")
  1157.      */
  1158.     public function ligneHoraire(int $idRequest $request)
  1159.     {
  1160.         $permissionResult $this->checkPermissionAdmin("lire""ligne");
  1161.         if ($permissionResult instanceof RedirectResponse) {
  1162.             return $permissionResult;
  1163.         }
  1164.         // Récupération des données de la base de données pour la ligne horaire spécifiée afin de crée un tableau d'objets pour pouvoir le recuperer en ajax
  1165.         $data_ligne_horaires $this->em->getrepository(LigneHoraire::class)->findByLigne($id);
  1166.         $array_ligne_horaire = array();
  1167.         foreach ($data_ligne_horaires as $key => $ligne_horaire) {
  1168.             $array_ligne_horaire[] = array(
  1169.                 'id' => $ligne_horaire->getId(),
  1170.                 'ouvert' => $ligne_horaire->isLgnHorOuvert(),
  1171.                 'jour' => $ligne_horaire->getLgnHorListeJours(),
  1172.                 'debut' => $ligne_horaire->getLgnHorDebut()->format('H:i'),
  1173.                 'fin' => $ligne_horaire->getLgnHorFin()->format('H:i'),
  1174.             );
  1175.         }
  1176.         return new JsonResponse($array_ligne_horaire);
  1177.     }
  1178.     /**
  1179.      * @Route("/admin/ligne_horaire_update", name="ligne_horaire_update")
  1180.      */
  1181.     public function ligneHoraireUpdate(Request $requestObjectManager $manager)
  1182.     {
  1183.         $permissionResult $this->checkPermissionAdmin("ecrire""ligne");
  1184.         if ($permissionResult instanceof RedirectResponse) {
  1185.             return $permissionResult;
  1186.         }
  1187.         foreach ($request->get('table_horaire') as $key => $ligne_horaire) {
  1188.             $LigneHoraire $this->em->getrepository(LigneHoraire::class)->find($ligne_horaire[3]);
  1189.             $ouverture false;
  1190.             if ($ligne_horaire[0] == 'true') {
  1191.                 $ouverture true;
  1192.             }
  1193.             $LigneHoraire->setLgnHorOuvert($ouverture);
  1194.             $LigneHoraire->setLgnHorDebut(new Datetime($ligne_horaire[1]));
  1195.             $LigneHoraire->setLgnHorFin(new Datetime($ligne_horaire[2]));
  1196.             $manager->persist($LigneHoraire);
  1197.         }
  1198.         $manager->flush();
  1199.         $this->cache->delete('ligne' $this->id);
  1200.         $this->cache->delete('nbr_ligne' $this->id);
  1201.         $this->vide_cache_centre_groupe($this->id);
  1202.         return $this->redirectToRoute('ligne');
  1203.     }
  1204. // Gestion Type Visite ------------------------------------------------------------
  1205.     /**
  1206.      * @Route("/admin/type_visite", name="type_visite")
  1207.      */
  1208.     public function TypeVisite()
  1209.     {
  1210.         $allpermission $this->checkAllPermissionAdmin("type_visite");
  1211.         if (!$allpermission || !$allpermission['lire']) {
  1212.             $this->addFlash('error''Impossible, vous n\'avez pas accés à cette page');
  1213.             return $this->redirectToRoute('admin_erreur');
  1214.         }
  1215.         $data_type_visites $this->cache->get('type_visite' $this->id, function () {
  1216.             $data_type_visite $this->em->getrepository(TypeVisite::class)->findByCentreGroupe($this->id);
  1217.             return $data_type_visite;
  1218.         });
  1219.         return $this->render('admin/type_visite_view.html.twig', [
  1220.             'type_visites' => $data_type_visites,
  1221.             'allpermission' => $allpermission,
  1222.         ]);
  1223.     }
  1224.     /**
  1225.      * @Route("/admin/type_visite_add", name="type_visite_add")
  1226.      */
  1227.     public function AddTypeVisite(Request $requestObjectManager $manager)
  1228.     {
  1229.         $permissionResult $this->checkPermissionAdmin("ecrire""type_visite");
  1230.         if ($permissionResult instanceof RedirectResponse) {
  1231.             return $permissionResult;
  1232.         }
  1233.         $type_visite = new TypeVisite;
  1234.         $centre_groupe $this->em->getrepository(CentreGroupe::class)->find($this->id);
  1235.         $type_visite->setCentreGroupe($centre_groupe);
  1236.         $type_visite->setTypVstLibele($request->get('libelle'));
  1237.         $type_visite->setTypVstLibeleLong($request->get('libellelong'));
  1238.         $type_visite->setTypVstLibeleCourt($request->get('libellecourt'));
  1239.         $manager->persist($type_visite);
  1240.         $manager->flush();
  1241.         $this->cache->delete('type_visite' $this->id);
  1242.         $this->vide_cache_centre_groupe($this->id);
  1243.         return $this->redirect($request->headers->get('referer'));
  1244.     }
  1245.     /**
  1246.      * @Route("/admin/type_visite_delete/{id}", name="type_visite_delete")
  1247.      */
  1248.     public function deleteTypeVisite(TypeVisite $type_visiteObjectManager $manager)
  1249.     {
  1250.         $permissionResult $this->checkPermissionAdmin("supp""type_visite");
  1251.         if ($permissionResult instanceof RedirectResponse) {
  1252.             return $permissionResult;
  1253.         }
  1254.         if ($type_visite->getCentreGroupe()->getId() !== $this->id) {
  1255.             return new Response('cannot_delete_type_visite_another_center');
  1256.         }
  1257.         try {
  1258.             // Supprimer l'entité
  1259.             $manager->remove($type_visite);
  1260.             $manager->flush();
  1261.             $this->cache->delete('type_visite' $this->id);
  1262.             $this->vide_cache_centre_groupe($this->id);
  1263.         } catch (ForeignKeyConstraintViolationException $e) {
  1264.             return new Response('cannot_delete_type_visite_associate');
  1265.         }
  1266.         // Rediriger l'utilisateur vers le type visite
  1267.         return new Response('ok');
  1268.     }
  1269.     /**
  1270.      * @Route("/admin/type_visite_update/{id}", name="type_visite_update")
  1271.      */
  1272.     public function updateTypeVisite(TypeVisite $type_visiteRequest $requestObjectManager $manager)
  1273.     {
  1274.         $permissionResult $this->checkPermissionAdmin("ecrire""type_visite");
  1275.         if ($permissionResult instanceof RedirectResponse) {
  1276.             return $permissionResult;
  1277.         }
  1278.         if ($type_visite->getCentreGroupe()->getId() !== $this->id) {
  1279.             $this->addFlash('error'"Impossible de mettre à jour le type de visite car il n'est pas liée à votre centre.");
  1280.             return $this->redirectToRoute('type_visite');
  1281.         }
  1282.         $centre_groupe $this->em->getrepository(CentreGroupe::class)->find($this->id);
  1283.         $type_visite->setCentreGroupe($centre_groupe);
  1284.         $type_visite->setTypVstLibele($request->get('libelle'));
  1285.         $type_visite->setTypVstLibeleLong($request->get('libellelong'));
  1286.         $type_visite->setTypVstLibeleCourt($request->get('libellecourt'));
  1287.         $manager->persist($type_visite);
  1288.         $manager->flush();
  1289.         $this->cache->delete('type_visite' $this->id);
  1290.         $this->vide_cache_centre_groupe($this->id);
  1291.         return $this->redirectToRoute('type_visite');
  1292.     }
  1293. // Gestion Type Vehicule ----------------------------------------------------------
  1294.     /**
  1295.      * @Route("/admin/type_vehicule", name="type_vehicule")
  1296.      */
  1297.     public function TypeVehicule(Request $requestPaginatorInterface $paginator): Response
  1298.     {
  1299.         $allpermission $this->checkAllPermissionAdmin("type_vehicule");
  1300.         if (!$allpermission || !$allpermission['lire']) {
  1301.             $this->addFlash('error''Impossible, vous n\'avez pas accés à cette page');
  1302.             return $this->redirectToRoute('admin_erreur');
  1303.         }
  1304.         $data_type_vehicules $this->cache->get('type_vehicule' $this->id, function () {
  1305.             $data_type_vehicule $this->em->getrepository(TypeVehicule::class)->findByCentreGroupe($this->id);
  1306.             return $data_type_vehicule;
  1307.         });
  1308.         $data_centre_types $this->cache->get("centre_type" $this->id, function () {
  1309.             $data_centre_type $this->em->getrepository(CentreType::class)->findTypesByCentreGroupeId($this->id);
  1310.             return $data_centre_type;
  1311.         });
  1312.         return $this->render('admin/type_vehicule_view.html.twig', [
  1313.             'type_vehicules' => $data_type_vehicules,
  1314.             'centre_types' => $data_centre_types,
  1315.             'allpermission' => $allpermission,
  1316.         ]);
  1317.     }
  1318.     /**
  1319.      * @Route("/admin/type_vehicule_add", name="type_vehicule_add")
  1320.      */
  1321.     public function AddTypeVehicule(Request $requestObjectManager $manager)
  1322.     {
  1323.         $permissionResult $this->checkPermissionAdmin("ecrire""type_vehicule");
  1324.         if ($permissionResult instanceof RedirectResponse) {
  1325.             return $permissionResult;
  1326.         }
  1327.         $type_vehicule = new TypeVehicule;
  1328.         $centre_groupe $this->em->getrepository(CentreGroupe::class)->find($this->id);
  1329.         $type_vehicule->setCentreGroupe($centre_groupe);
  1330.         $centre_type $this->em->getrepository(CentreType::class)->find($request->get('type'));
  1331.         $type_vehicule->setTvCentreType($centre_type);
  1332.         $type_vehicule->setTvLibelle($request->get('libelle'));
  1333.         $type_vehicule->setTvMoteur($request->get('moteur') ? 0);
  1334.         $type_vehicule->setTvMd($request->get('tdm') ? 0);
  1335.         $type_vehicule->setTvEnsemble($request->get('ens') ? 0);
  1336.         $type_vehicule->setTvValide($request->get('actif') ? 0);
  1337.         $manager->persist($type_vehicule);
  1338.         $manager->flush();
  1339.         $this->cache->delete('type_vehicule' $this->id);
  1340.         $this->vide_cache_centre_groupe($this->id);
  1341.         return $this->redirect($request->headers->get('referer'));
  1342.     }
  1343.     /**
  1344.      * @Route("/admin/type_vehicule_delete/{id}", name="type_vehicule_delete")
  1345.      */
  1346.     public function deleteTypeVehicule(TypeVehicule $type_vehiculeObjectManager $manager)
  1347.     {
  1348.         $permissionResult $this->checkPermissionAdmin("supp""type_vehicule");
  1349.         if ($permissionResult instanceof RedirectResponse) {
  1350.             return $permissionResult;
  1351.         }
  1352.         if ($type_vehicule->getCentreGroupe()->getId() !== $this->id) {
  1353.             return new Response('cannot_delete_type_vehicule_another_center');
  1354.         }
  1355.         try {
  1356.             // Supprimer l'entité
  1357.             $manager->remove($type_vehicule);
  1358.             $manager->flush();
  1359.             $this->cache->delete('type_vehicule' $this->id);
  1360.             $this->vide_cache_centre_groupe($this->id);
  1361.         } catch (ForeignKeyConstraintViolationException $e) {
  1362.             return new Response('cannot_delete_type_vehicule_associate');
  1363.         }
  1364.         // Rediriger l'utilisateur vers le type vehicule
  1365.         return new Response('ok');
  1366.     }
  1367.     /**
  1368.      * @Route("/admin/type_vehicule_update/{id}", name="type_vehicule_update")
  1369.      */
  1370.     public function updateTypeVehicule(TypeVehicule $type_vehiculeRequest $requestObjectManager $manager)
  1371.     {
  1372.         $permissionResult $this->checkPermissionAdmin("ecrire""type_vehicule");
  1373.         if ($permissionResult instanceof RedirectResponse) {
  1374.             return $permissionResult;
  1375.         }
  1376.         if ($type_vehicule->getCentreGroupe()->getId() !== $this->id) {
  1377.             $this->addFlash('error'"Impossible de mettre à jour le type de véhicule car il n'est pas lié à votre centre.");
  1378.             return $this->redirectToRoute('type_vehicule');
  1379.         }
  1380.         $centre_groupe $this->em->getrepository(CentreGroupe::class)->find($this->id);
  1381.         $type_vehicule->setCentreGroupe($centre_groupe);
  1382.         $centre_type $this->em->getrepository(CentreType::class)->find($request->get('type'));
  1383.         $type_vehicule->setTvCentreType($centre_type);
  1384.         $type_vehicule->setTvLibelle($request->get('libelle'));
  1385.         $type_vehicule->setTvMoteur($request->get('moteur') ? 0);
  1386.         $type_vehicule->setTvMd($request->get('tdm') ? 0);
  1387.         $type_vehicule->setTvEnsemble($request->get('ens') ? 0);
  1388.         $type_vehicule->setTvValide($request->get('actif') ? 0);
  1389.         $manager->persist($type_vehicule);
  1390.         $manager->flush();
  1391.         $this->cache->delete('type_vehicule' $this->id);
  1392.         $this->vide_cache_centre_groupe($this->id);
  1393.         return $this->redirectToRoute('type_vehicule');
  1394.     }
  1395. // Gestion Promotions -------------------------------------------------------------
  1396.     /**
  1397.      * @Route("/admin/promotion", name="promotion")
  1398.      */
  1399.     public function promotion(Request $requestPaginatorInterface $paginator): Response
  1400.     {
  1401.         $allpermission $this->checkAllPermissionAdmin("promotion");
  1402.         if (!$allpermission || !$allpermission['lire']) {
  1403.             $this->addFlash('error''Impossible, vous n\'avez pas accés à cette page');
  1404.             return $this->redirectToRoute('admin_erreur');
  1405.         }
  1406.         $data_promotions $this->cache->get('promotion' $this->id, function () {
  1407.             $data_promotions $this->em->getrepository(Promotion::class)->findByCentreGroupe($this->id);
  1408.             return $data_promotions;
  1409.         });
  1410. //        dd($data_promotions);
  1411.        
  1412.         $data_prestations $this->em->getrepository(CentrePrestation::class)->findByCentreGroupe($this->id);
  1413.         $data_type_visites $this->cache->get('type_visite' $this->id, function () {
  1414.             $data_type_visite $this->em->getrepository(TypeVisite::class)->findByCentreGroupe($this->id);
  1415.             return $data_type_visite;
  1416.         });
  1417.         return $this->render('admin/promotion_view.html.twig', [
  1418.             'promotions' => $data_promotions,
  1419.             'prestations' => $data_prestations,
  1420.             'type_visites' => $data_type_visites,
  1421.             'allpermission' => $allpermission,
  1422.         ]);
  1423.     }
  1424.     /**
  1425.      * @Route("/admin/promotion_add", name="promotion_add")
  1426.      */
  1427.     public function AddPromotion(Request $requestObjectManager $manager)
  1428.     {
  1429.         $permissionResult $this->checkPermissionAdmin("ecrire""promotion");
  1430.         if ($permissionResult instanceof RedirectResponse) {
  1431.             return $permissionResult;
  1432.         }
  1433.         if (!$request->get('nom')) {
  1434.             $this->addFlash('error''Vous n\'avez pas rempli le nom de la promotion.');
  1435.             return $this->redirectToRoute('promotion');
  1436.         }
  1437.         if (!$request->get('reduction')) {
  1438.             $this->addFlash('error''Vous n\'avez pas rempli le montant.');
  1439.             return $this->redirectToRoute('promotion');
  1440.         }
  1441.         $promotion = new Promotion;
  1442.         $centre_groupe $this->em->getrepository(CentreGroupe::class)->find($this->id);
  1443.         $promotion->setCentreGroupe($centre_groupe);
  1444.         $promotion->setPrmNom($request->get('nom'));
  1445.         $promotion->setPrmReduction($request->get('reduction'));
  1446.         $manager->persist($promotion);
  1447.         $manager->flush();
  1448.         $this->cache->delete('promotion' $this->id'promotion_prestation' $this->id);
  1449.         return $this->redirectToRoute('promotion');
  1450.         $this->vide_cache_centre_groupe($this->id);
  1451.     }
  1452.     /**
  1453.      * @Route("/admin/promotion_delete/{id}", name="promotion_delete")
  1454.      */
  1455.     public function deletePromotion(Promotion $promotionObjectManager $manager)
  1456.     {
  1457.         $permissionResult $this->checkPermissionAdmin("supp""promotion");
  1458.         if ($permissionResult instanceof RedirectResponse) {
  1459.             return $permissionResult;
  1460.         }
  1461.         if ($promotion->getCentreGroupe()->getId() !== $this->id) {
  1462.             return new Response('cannot_delete_promotion_another_center');
  1463.         }
  1464.         try {
  1465.             // Supprimer l'entité
  1466.             $manager->remove($promotion);
  1467.             $manager->flush();
  1468.             $this->cache->delete('promotion' $this->id);
  1469.             $this->vide_cache_centre_groupe($this->id);
  1470.         } catch (ForeignKeyConstraintViolationException $e) {
  1471.             return new Response('cannot_delete_promotion_associate');
  1472.         }
  1473.         // Rediriger l'utilisateur vers la promotion
  1474.         return new Response('ok');
  1475.     }
  1476.     /**
  1477.      * @Route("/admin/promotion_update/{id}", name="promotion_update")
  1478.      */
  1479.     public function updatePromotion(Promotion $promotionRequest $requestObjectManager $manager)
  1480.     {
  1481.         $permissionResult $this->checkPermissionAdmin("ecrire""promotion");
  1482.         if ($permissionResult instanceof RedirectResponse) {
  1483.             return $permissionResult;
  1484.         }
  1485.         if ($promotion->getCentreGroupe()->getId() !== $this->id) {
  1486.             $this->addFlash('error'"Impossible de mettre à jour ma promotion car elle n'est pas liée à votre centre.");
  1487.             return $this->redirectToRoute('promotion');
  1488.         }
  1489.         if (!$request->get('nom')) {
  1490.             $this->addFlash('error''Vous n\'avez pas rempli le nom de la promotion.');
  1491.             return $this->redirectToRoute('promotion');
  1492.         }
  1493.         if (!$request->get('reduction')) {
  1494.             $this->addFlash('error''Vous n\'avez pas rempli le montant.');
  1495.             return $this->redirectToRoute('promotion');
  1496.         }
  1497.         $centre_groupe $this->em->getrepository(CentreGroupe::class)->find($this->id);
  1498.         $promotion->setCentreGroupe($centre_groupe);
  1499.         $promotion->setPrmNom($request->get('nom'));
  1500.         $promotion->setPrmReduction($request->get('reduction'));
  1501.         $manager->persist($promotion);
  1502.         $manager->flush();
  1503.         $this->cache->delete('promotion' $this->id'promotion_prestation' $this->id);
  1504.         return $this->redirectToRoute('promotion');
  1505.         $this->vide_cache_centre_groupe($this->id);
  1506.     }
  1507.     /**
  1508.      * @Route("/admin/promotion_type_visite/{id}", name="promotion_type_visite")
  1509.      */
  1510.     public function promotionTypeVisite(Promotion $promotion)
  1511.     {
  1512.         $permissionResult $this->checkPermissionAdmin("lire""promotion");
  1513.         if ($permissionResult instanceof RedirectResponse) {
  1514.             return $permissionResult;
  1515.         }
  1516.         if ($promotion->getCentreGroupe()->getId() !== $this->id) {
  1517.             $this->addFlash('error'"Impossible de mettre à jour ma promotion car elle n'est pas liée à votre centre.");
  1518.             return $this->redirectToRoute('promotion');
  1519.         }
  1520.         $array_type_visite = [];
  1521.         foreach ($promotion->getCentrePrestations() as $centrePrestation) {
  1522.             $array_type_visite[] = array(
  1523.                 'centre_prestation_id' => $centrePrestation->getId(),
  1524.                 'type_visite_id' => $centrePrestation->getPstTypeVisite()->getId(),
  1525.                 'type_visite_libelle' => $centrePrestation->getPstTypeVisite()->getTypVstLibele(),
  1526.                 'type_visite_libelle_long' => $centrePrestation->getPstTypeVisite()->getTypVstLibeleLong(),
  1527.             );
  1528.         }
  1529.         return new JsonResponse($array_type_visite);
  1530.     }
  1531.     /**
  1532.      * @Route("/admin/promotion_prestation_update/{id}", name="promotion_prestation_update")
  1533.      */
  1534.     public function updatePromotionPrestation(Promotion $promotionRequest $requestObjectManager $manager)
  1535.     {
  1536.         $permissionResult $this->checkPermissionAdmin("ecrire""promotion");
  1537.         if ($permissionResult instanceof RedirectResponse) {
  1538.             return $permissionResult;
  1539.         }
  1540.         if ($promotion->getCentreGroupe()->getId() !== $this->id) {
  1541.             $this->addFlash('error'"Impossible de mettre à jour l'association de la promotion à la prestation car elle n'est pas liée à votre centre.");
  1542.             return $this->redirectToRoute('promotion');
  1543.         }
  1544.         // On supprime toute liaisons entre promotion et prestation
  1545.         // Pour chaque centrePrestation associé à la promotion, on récupère son id
  1546.         foreach ($promotion->getCentrePrestations() as $centrePrestation) {
  1547.             $centrePrestationId $centrePrestation->getId();
  1548.             // On récupère le centrePrestation correspondant à l'id
  1549.             $centre_prestation $this->em->getrepository(CentrePrestation::class)->find($centrePrestationId);
  1550.             // On retire le centrePrestation de la liste des centrePrestations associés à la promotion
  1551.             $promotion->removeCentrePrestation($centre_prestation);
  1552.             // On persiste les modifications sur la promotion
  1553.             $manager->persist($promotion);
  1554.         }
  1555.         // On sauvegarde les modifications en base de données
  1556.         $manager->flush();
  1557.         // Récupération des valeurs de la variable 'type_visite' dans un tableau envoyées en POST depuis le formulaire
  1558.         $array_prestation $request->request->get('type_visite');
  1559.         // Vérification que la variable est un tableau ou un objet itérable
  1560.         if (is_array($array_prestation) || $array_prestation instanceof \Traversable) {
  1561.             // Boucle sur chaque élément du tableau 'type_visite'
  1562.             foreach ($array_prestation as $idprestation) {
  1563.                 // Récupération de l'entité 'CentrePrestation' correspondante à l'idprestation courant
  1564.                 $centre_prestation $this->em->getRepository(CentrePrestation::class)->find($idprestation);
  1565.                 // Fait la liaison entre l'entité 'CentrePrestation' et l'entité 'Promotion'
  1566.                 $promotion->addCentrePrestation($centre_prestation);
  1567.                 // Enregistrement de la promotion en base de données
  1568.                 $manager->persist($promotion);
  1569.             }
  1570.             // Exécution des requêtes SQL en attente
  1571.             $manager->flush();
  1572.         }
  1573.         $this->cache->delete('promotion' $this->id'promotion_prestation' $this->id);
  1574.         return $this->redirectToRoute('promotion');
  1575.         $this->vide_cache_centre_groupe($this->id);
  1576.     }
  1577. // Gestion des Coupons Promotions -------------------------------------------------
  1578.     /**
  1579.      * @Route("/admin/coupon_promotion", name="coupon_promotion")
  1580.      */
  1581.     public function couponPromotion(Request $requestPaginatorInterface $paginator): Response
  1582.     {
  1583.         $allpermission $this->checkAllPermissionAdmin("coupon_promotion");
  1584.         if (!$allpermission || !$allpermission['lire']) {
  1585.             $this->addFlash('error''Impossible, vous n\'avez pas accés à cette page');
  1586.             return $this->redirectToRoute('admin_erreur');
  1587.         }
  1588.         $data_coupon_promotions $this->cache->get('coupon_promotion' $this->id, function () {
  1589.             $data_coupon_promotions $this->em->getrepository(CentreCouponPromotion::class)->findByCentreGroupe($this->id);
  1590.             return $data_coupon_promotions;
  1591.         });
  1592.         $data_prestations $this->cache->get('coupon_promotion_prestation' $this->id, function () {
  1593.             $data_prestations $this->em->getrepository(CentrePrestation::class)->findByCentreGroupe($this->id);
  1594.             return $data_prestations;
  1595.         });
  1596.         $data_type_visites $this->cache->get('type_visite' $this->id, function () {
  1597.             $data_type_visite $this->em->getrepository(TypeVisite::class)->findByCentreGroupe($this->id);
  1598.             return $data_type_visite;
  1599.         });
  1600.         return $this->render('admin/coupon_promotion_view.html.twig', [
  1601.             'coupon_promotions' => $data_coupon_promotions,
  1602.             'prestations' => $data_prestations,
  1603.             'type_visites' => $data_type_visites,
  1604.             'allpermission' => $allpermission,
  1605.         ]);
  1606.     }
  1607.     /**
  1608.      * @Route("/admin/coupon_promotion_add", name="coupon_promotion_add")
  1609.      */
  1610.     public function AddCouponPromotion(Request $requestObjectManager $manager)
  1611.     {
  1612.         $permissionResult $this->checkPermissionAdmin("ecrire""coupon_promotion");
  1613.         if ($permissionResult instanceof RedirectResponse) {
  1614.             return $permissionResult;
  1615.         }
  1616.         if (!$request->get('libelle')) {
  1617.             $this->addFlash('error''Vous n\'avez pas rempli le nom du code promotion.');
  1618.             return $this->redirectToRoute('coupon_promotion');
  1619.         }
  1620.         if (!$request->get('reduction')) {
  1621.             $this->addFlash('error''Vous n\'avez pas rempli le tarif de reduction.');
  1622.             return $this->redirectToRoute('coupon_promotion');
  1623.         }
  1624.         if (!$request->get('utilisation') and !$request->get('illimite')) {
  1625.             $this->addFlash('error''Vous n\'avez pas rempli le nombre d\'utilisation.');
  1626.             return $this->redirectToRoute('coupon_promotion');
  1627.         }
  1628.         $coupon_promotion = new CentreCouponPromotion;
  1629.         $centre_groupe $this->em->getrepository(CentreGroupe::class)->find($this->id);
  1630.         $coupon_promotion->setCentreGroupe($centre_groupe);
  1631.         $coupon_promotion->setCpnPrmLibelle($request->get('libelle'));
  1632.         $coupon_promotion->setCpnPrmMontantRemise($request->get('reduction'));
  1633.         $coupon_promotion->setCpnPrmNbrUtilisation($request->get('utilisation') ? $request->get('utilisation') : 0);
  1634.         $coupon_promotion->setCpnPrmDateLimite($request->get('date') ? new DateTime($request->get('date')) : null);
  1635.         $coupon_promotion->setCpnPrmIllimite($request->get('illimite') ? 0);
  1636.         $coupon_promotion->setCpnTypeReduction($request->get('type_reduction') ? 0);
  1637.         $manager->persist($coupon_promotion);
  1638.         $manager->flush();
  1639.         $this->cache->delete('coupon_promotion' $this->id'coupon_promotion_prestation' $this->id);
  1640.         return $this->redirectToRoute('coupon_promotion');
  1641.         $this->vide_cache_centre_groupe($this->id);
  1642.     }
  1643.     /**
  1644.      * @Route("/admin/coupon_promotion_delete/{id}", name="coupon_promotion_delete")
  1645.      */
  1646.     public function deleteCouponPromotion(CentreCouponPromotion $coupon_promotionObjectManager $manager)
  1647.     {
  1648.         $permissionResult $this->checkPermissionAdmin("supp""coupon_promotion");
  1649.         if ($permissionResult instanceof RedirectResponse) {
  1650.             return $permissionResult;
  1651.         }
  1652.         if ($coupon_promotion->getCentreGroupe()->getId() !== $this->id) {
  1653.             return new Response('cannot_delete_promotion_coupon_another_center');
  1654.         }
  1655.         // Supprimer l'entité
  1656.         $manager->remove($coupon_promotion);
  1657.         $manager->flush();
  1658.         $this->cache->delete('coupon_promotion' $this->id);
  1659.         $this->vide_cache_centre_groupe($this->id);
  1660.         // Rediriger l'utilisateur vers la promotion
  1661.         return new Response('ok');
  1662.     }
  1663.     /**
  1664.      * @Route("/admin/coupon_promotion_update/{id}", name="coupon_promotion_update")
  1665.      */
  1666.     public function updateCouponPromotion(CentreCouponPromotion $coupon_promotionRequest $requestObjectManager $manager)
  1667.     {
  1668.         $permissionResult $this->checkPermissionAdmin("ecrire""coupon_promotion");
  1669.         if ($permissionResult instanceof RedirectResponse) {
  1670.             return $permissionResult;
  1671.         }
  1672.         if ($coupon_promotion->getCentreGroupe()->getId() !== $this->id) {
  1673.             $this->addFlash('error'"Impossible de mettre à jour le coupon promotion car il n'est pas liée à votre centre.");
  1674.             return $this->redirectToRoute('coupon_promotion');
  1675.         }
  1676.         if (!$request->get('libelle')) {
  1677.             $this->addFlash('error''Vous n\'avez pas rempli le nom du code promotion.');
  1678.             return $this->redirectToRoute('coupon_promotion');
  1679.         }
  1680.         if (!$request->get('reduction')) {
  1681.             $this->addFlash('error''Vous n\'avez pas rempli le tarif de reduction.');
  1682.             return $this->redirectToRoute('coupon_promotion');
  1683.         }
  1684.         if (!$request->get('utilisation') or $request->get('illimite')) {
  1685.             $this->addFlash('error''Vous n\'avez pas rempli le nombre d\'utilisation.');
  1686.             return $this->redirectToRoute('coupon_promotion');
  1687.         }
  1688.         $centre_groupe $this->em->getrepository(CentreGroupe::class)->find($this->id);
  1689.         $coupon_promotion->setCentreGroupe($centre_groupe);
  1690.         $coupon_promotion->setCpnPrmLibelle($request->get('libelle'));
  1691.         $coupon_promotion->setCpnPrmMontantRemise($request->get('reduction'));
  1692.         $coupon_promotion->setCpnPrmNbrUtilisation($request->get('utilisation') ? $request->get('utilisation') : null);
  1693.         $coupon_promotion->setCpnPrmDateLimite($request->get('date') ? new DateTime($request->get('date')) : null);
  1694.         $coupon_promotion->setCpnPrmIllimite($request->get('illimite') ? 0);
  1695.         $coupon_promotion->setCpnTypeReduction($request->get('type_reduction') ? 0);
  1696.         $manager->persist($coupon_promotion);
  1697.         $manager->flush();
  1698.         $this->cache->delete('coupon_promotion' $this->id'coupon_promotion_prestation' $this->id);
  1699.         $this->vide_cache_centre_groupe($this->id);
  1700.         return $this->redirectToRoute('coupon_promotion');
  1701.     }
  1702.     /**
  1703.      * @Route("/admin/coupon_promotion_type_visite/{id}", name="coupon_promotion_type_visite")
  1704.      */
  1705.     public function couponPromotionTypeVisite(CentreCouponPromotion $couponPromotion)
  1706.     {
  1707.         $permissionResult $this->checkPermissionAdmin("lire""coupon_promotion");
  1708.         if ($permissionResult instanceof RedirectResponse) {
  1709.             return $permissionResult;
  1710.         }
  1711.         if ($couponPromotion->getCentreGroupe()->getId() !== $this->id) {
  1712.             $this->addFlash('error'"Impossible de lire ce coupon promotion car il n'est pas liée à votre centre.");
  1713.             return $this->redirectToRoute('coupon_promotion');
  1714.         }
  1715.         $array_type_visite = [];
  1716.         foreach ($couponPromotion->getCentreCouponPromotionPrestation() as $centrePrestation) {
  1717.             $array_type_visite[] = array(
  1718.                 'centre_prestation_id' => $centrePrestation->getId(),
  1719.                 'type_visite_id' => $centrePrestation->getPstTypeVisite()->getId(),
  1720.                 'type_visite_libelle' => $centrePrestation->getPstTypeVisite()->getTypVstLibele(),
  1721.                 'type_visite_libelle_long' => $centrePrestation->getPstTypeVisite()->getTypVstLibeleLong(),
  1722.             );
  1723.         }
  1724.         return new JsonResponse($array_type_visite);
  1725.     }
  1726.     /**
  1727.      * @Route("/admin/coupon_promotion_prestation_update/{id}", name="coupon_promotion_prestation_update")
  1728.      */
  1729.     public function updateCouponPromotionPrestation(CentreCouponPromotion $couponPromotionRequest $requestObjectManager $manager)
  1730.     {
  1731.         $permissionResult $this->checkPermissionAdmin("ecrire""coupon_promotion");
  1732.         if ($permissionResult instanceof RedirectResponse) {
  1733.             return $permissionResult;
  1734.         }
  1735.         if ($couponPromotion->getCentreGroupe()->getId() !== $this->id) {
  1736.             $this->addFlash('error'"Impossible de mettre à jour le choix de la prestation car il n'est pas liée à votre centre.");
  1737.             return $this->redirectToRoute('coupon_promotion');
  1738.         }
  1739.         // On supprime toute liaisons entre promotion et prestation
  1740.         // Pour chaque centrePrestation associé à la promotion, on récupère son id
  1741.         foreach ($couponPromotion->getCentreCouponPromotionPrestation() as $centrePrestation) {
  1742.             $centrePrestationId $centrePrestation->getId();
  1743.             // On récupère le centrePrestation correspondant à l'id
  1744.             $centre_prestation $this->em->getrepository(CentrePrestation::class)->find($centrePrestationId);
  1745.             // On retire le centrePrestation de la liste des centrePrestations associés à la promotion
  1746.             $couponPromotion->removeCentreCouponPromotionPrestation($centre_prestation);
  1747.             // On persiste les modifications sur la promotion
  1748.             $manager->persist($couponPromotion);
  1749.         }
  1750.         // On sauvegarde les modifications en base de données
  1751.         $manager->flush();
  1752.         // Récupération des valeurs de la variable 'type_visite' dans un tableau envoyées en POST depuis le formulaire
  1753.         $array_prestation $request->request->get('type_visite');
  1754.         // Vérification que la variable est un tableau ou un objet itérable
  1755.         if (is_array($array_prestation) || $array_prestation instanceof \Traversable) {
  1756.             // Boucle sur chaque élément du tableau 'type_visite'
  1757.             foreach ($array_prestation as $idprestation) {
  1758.                 // Récupération de l'entité 'CentrePrestation' correspondante à l'idprestation courant
  1759.                 $centre_prestation $this->em->getRepository(CentrePrestation::class)->find($idprestation);
  1760.                 // Fait la liaison entre l'entité 'CentrePrestation' et l'entité 'Promotion'
  1761.                 $couponPromotion->addCentreCouponPromotionPrestation($centre_prestation);
  1762.                 // Enregistrement de la promotion en base de données
  1763.                 $manager->persist($couponPromotion);
  1764.             }
  1765.             // Exécution des requêtes SQL en attente
  1766.             $manager->flush();
  1767.         }
  1768.         $this->cache->delete('coupon_promotion' $this->id'coupon_promotion_prestation' $this->id);
  1769.         $this->vide_cache_centre_groupe($this->id);
  1770.         return $this->redirectToRoute('coupon_promotion');
  1771.     }
  1772. // Gestion des Clients en Compte --------------------------------------------------
  1773.     /**
  1774.      * @Route("/autoLoginClientCompte/{id}", name="autoLoginClientCompte")
  1775.      */
  1776.     public function autoLoginClientCompte($idRequest $requestEventDispatcherInterface $dispatcher): Response
  1777.     {
  1778.         $user $this->em->getrepository(ClientCompte::class)->find($id);
  1779.         if ($user->getCentreGroupe()->getId() != $this->id) {
  1780.             return $this->redirectToRoute('index');
  1781.         }
  1782.         $token = new UsernamePasswordToken($usernull'pro'$user->getRoles());
  1783.         $this->get("security.token_storage")->setToken($token);
  1784.         $event = new SecurityEvents($request);
  1785.         $dispatcher->dispatch($eventSecurityEvents::INTERACTIVE_LOGIN);
  1786.         // dd( $token,$user,$event,$dispatcher);
  1787.         return $this->redirectToRoute('app_pro');
  1788.     }
  1789.     /**
  1790.      * @Route("/admin/client_compte", name="client_compte")
  1791.      */
  1792.     public function clientCompte(): Response
  1793.     {
  1794.         $allpermission $this->checkAllPermissionAdmin("client_compte");
  1795.         if (!$allpermission || !$allpermission['lire']) {
  1796.             $this->addFlash('error''Impossible, vous n\'avez pas accés à cette page');
  1797.             return $this->redirectToRoute('admin_erreur');
  1798.         }
  1799.         $data_client_comptes $this->cache->get('client_compte' $this->id, function () {
  1800.             $data_client_comptes $this->em->getrepository(ClientCompte::class)->findByCentreGroupe($this->id);
  1801.             return $data_client_comptes;
  1802.         });
  1803.         $data_centre_types $this->cache->get("centre_type" $this->id, function () {
  1804.             $data_centre_types $this->em->getrepository(CentreType::class)->findTypesByCentreGroupeId($this->id);
  1805.             return $data_centre_types;
  1806.             });
  1807.             
  1808.         $data_sms $this->em->getrepository(ParametreCentre::class)->findSmsByCentreGroupe($this->id);
  1809.         return $this->render('admin/client_compte_view.html.twig', [
  1810.             'client_comptes' => $data_client_comptes,
  1811.             'centre_types' => $data_centre_types,
  1812.             'allpermission' => $allpermission,
  1813.             'data_sms' => $data_sms,
  1814.         ]);
  1815.     }
  1816.     /**
  1817.      * @Route("/admin/client_compte_add", name="client_compte_add")
  1818.      */
  1819.     public function AddClientCompte(Request $requestObjectManager $manager)
  1820.     {
  1821.         $permissionResult $this->checkPermissionAdmin("ecrire""client_compte");
  1822.         if ($permissionResult instanceof RedirectResponse) {
  1823.             return $permissionResult;
  1824.         }
  1825.         $referer $request->headers->get('referer');
  1826.         if (!$request->get('type')) {
  1827.             $this->addFlash('error''Vous n\'avez pas rempli le type de prestation.');
  1828.             if ($referer) {
  1829.                 return $this->redirect($referer);
  1830.             } else {
  1831.                 return $this->redirectToRoute('client_compte');
  1832.             }
  1833.         }
  1834.         if (!$request->get('username')) {
  1835.             $this->addFlash('error''Vous n\'avez pas rempli l\'identifiant.');
  1836.             if ($referer) {
  1837.                 return $this->redirect($referer);
  1838.             } else {
  1839.                 return $this->redirectToRoute('client_compte');
  1840.             }
  1841.         }
  1842.         if (!$request->get('email_cc')) {
  1843.             $this->addFlash('error''Vous n\'avez pas rempli l\'email.');
  1844.             if ($referer) {
  1845.                 return $this->redirect($referer);
  1846.             } else {
  1847.                 return $this->redirectToRoute('client_compte');
  1848.             }
  1849.         }
  1850.         if (!$request->get('telephone1')) {
  1851.             $this->addFlash('error''Vous n\'avez pas rempli le numero de téléphone.');
  1852.             if ($referer) {
  1853.                 return $this->redirect($referer);
  1854.             } else {
  1855.                 return $this->redirectToRoute('client_compte');
  1856.             }
  1857.         }
  1858.         if (!$request->get('rue')) {
  1859.             $this->addFlash('error''Vous n\'avez pas rempli la rue.');
  1860.             if ($referer) {
  1861.                 return $this->redirect($referer);
  1862.             } else {
  1863.                 return $this->redirectToRoute('client_compte');
  1864.             }
  1865.         }
  1866.         if (!$request->get('postal')) {
  1867.             $this->addFlash('error''Vous n\'avez pas rempli le code postal.');
  1868.             if ($referer) {
  1869.                 return $this->redirect($referer);
  1870.             } else {
  1871.                 return $this->redirectToRoute('client_compte');
  1872.             }
  1873.         }
  1874.         if (!$request->get('ville')) {
  1875.             $this->addFlash('error''Vous n\'avez pas rempli la ville.');
  1876.             if ($referer) {
  1877.                 return $this->redirect($referer);
  1878.             } else {
  1879.                 return $this->redirectToRoute('client_compte');
  1880.             }
  1881.         }
  1882.         $client_compte = new ClientCompte;
  1883.         $centre_groupe $this->em->getrepository(CentreGroupe::class)->find($this->id);
  1884.         $client_compte->setCentreGroupe($centre_groupe);
  1885.         $client_compte->setCentreType(null);
  1886.         $randomPassword bin2hex(random_bytes(10));
  1887.         $hashedPassword password_hash($randomPasswordPASSWORD_DEFAULT);
  1888.         $client_compte->setCliPassword($hashedPassword);
  1889.         $client_compte->setCliNomSociete($request->get('societe'));
  1890.         $client_compte->setCliUsername($request->get('username'));
  1891.         if ($request->get('mdp') != "") {
  1892.             $hashedPassword $this->passwordHasher->hashPassword(
  1893.                 $client_compte,
  1894.                 $request->get('mdp')
  1895.             );
  1896.             $client_compte->setCliPassword($hashedPassword);
  1897.         }
  1898.         $client_compte->setCliNom($request->get('nom_cc'));
  1899.         $client_compte->setCliPrenom($request->get('prenom_cc'));
  1900.         $client_compte->setCliEmail($request->get('email_cc'));
  1901.         $client_compte->setCliTelephone($request->get('telephone1'));
  1902.         $client_compte->setCliTelephone2($request->get('telephone2'));
  1903.         $client_compte->setCliFax($request->get('fax'));
  1904.         $client_compte->setCliTva($request->get('tva') ? $request->get('tva') : null);
  1905.         $client_compte->setCliSiren($request->get('siren') ? $request->get('siren') : null);
  1906.         $client_compte->setCliCpl($request->get('cpl') ? $request->get('cpl') : null);
  1907.         $client_compte->setCliContact1Nom($request->get('nom_responsable') ? $request->get('nom_responsable') : null);
  1908.         $client_compte->setCliContact1Prenom($request->get('prenom_responsable') ? $request->get('prenom_responsable') : null);
  1909.         $client_compte->setCliContact1Email($request->get('email_responsable') ? $request->get('email_responsable') : null);
  1910.         $client_compte->setCliContact1Telephone($request->get('telephone_responsable') ? $request->get('telephone_responsable') : null);
  1911.         $client_compte->setCliContact2Nom($request->get('nom_compta') ? $request->get('nom_compta') : null);
  1912.         $client_compte->setCliContact2Prenom($request->get('prenom_compta') ? $request->get('prenom_compta') : null);
  1913.         $client_compte->setCliContact2Email($request->get('email_compta') ? $request->get('email_compta') : null);
  1914.         $client_compte->setCliContact2Telephone($request->get('telephone_compta') ? $request->get('telephone_compta') : null);
  1915.         $client_compte->setCliIsActive($request->get('actif') ? 0);
  1916.         $client_compte->setCliHasProAccess($request->get('pro_access') ? 0);
  1917.         $client_compte->setCliNbJourAlerteEcheance1($request->get('alerte1') ? $request->get('alerte1') : null);
  1918.         $client_compte->setCliNbJourAlerteEcheance2($request->get('alerte2') ? $request->get('alerte2') : null);
  1919.         $client_compte->setCliNbJourAlerteEcheance3($request->get('alerte3') ? $request->get('alerte3') : null);
  1920.         $client_compte->setCliNbJourAlerteEcheanceSms1($request->get('alerteSms1') ? $request->get('alerteSms1') : null);
  1921.         $client_compte->setCliNbJourAlerteEcheanceSms2($request->get('alerteSms2') ? $request->get('alerteSms2') : null);
  1922.         $client_compte->setCliNbJourAlerteEcheanceSms3($request->get('alerteSms3') ? $request->get('alerteSms3') : null);
  1923.         $client_compte->setCliVl(false);
  1924.         $client_compte->setCliPl(false);
  1925.         $client_compte->setCliCl(false);
  1926.         foreach ($request->get('type') as $type) {
  1927.             if ($type == 'VL') {
  1928.                 $client_compte->setCliVl(true);
  1929.             }
  1930.             if ($type == 'PL') {
  1931.                 $client_compte->setCliPl(true);
  1932.             }
  1933.             if ($type == 'CL') {
  1934.                 $client_compte->setCliCl(true);
  1935.             }
  1936.         }
  1937.         $adresse = new Adresse;
  1938.         // $adresse->setAdrCoordonnees($request->get(''));
  1939.         $adresse->setAdrRue($request->get('rue'));
  1940.         $adresse->setAdrComplement($request->get('complement'));
  1941.         $adresse->setAdrCodePostal($request->get('postal'));
  1942.         $adresse->setAdrVille($request->get('ville'));
  1943.         $manager->persist($adresse);
  1944.         $client_compte->setAdresse($adresse);
  1945.         if ($request->get('rue_fact') == null && $request->get('postal_fact') == null && $request->get('ville_fact') == null) {
  1946.             $client_compte->setAdresseFacturation($adresse);
  1947.         } else {
  1948.             $adresseFact = new Adresse;
  1949.             // $adresse->setAdrCoordonnees($request->get(''));
  1950.             $adresseFact->setAdrRue($request->get('rue_fact'));
  1951.             $adresseFact->setAdrComplement($request->get('complement_fact'));
  1952.             $adresseFact->setAdrCodePostal($request->get('postal_fact'));
  1953.             $adresseFact->setAdrVille($request->get('ville_fact'));
  1954.             $manager->persist($adresseFact);
  1955.             $client_compte->setAdresseFacturation($adresseFact);
  1956.         }
  1957.         $manager->persist($client_compte);
  1958.         $manager->flush();
  1959.         $this->cache->delete('client_compte' $this->id);
  1960.         $this->cache->delete('client_compte_actif' $this->id);
  1961.         $this->addFlash('success''Nouveau client enregistré.');
  1962.         if ($referer) {
  1963.             return $this->redirect($referer);
  1964.         } else {
  1965.             return $this->redirectToRoute('dashboard');
  1966.         }
  1967.     }
  1968.     /**
  1969.      * @Route("/admin/client_compte_delete/{id}", name="client_compte_delete")
  1970.      */
  1971.     public function deleteClientCompte(ClientCompte $client_compteObjectManager $manager)
  1972.     {
  1973.         $permissionResult $this->checkPermissionAdmin("supp""client_compte");
  1974.         if ($permissionResult instanceof RedirectResponse) {
  1975.             return $permissionResult;
  1976.         }
  1977.         if ($client_compte->getCentreGroupe()->getId() !== $this->id) {
  1978.             return new Response('cannot_delete_client_compte_another_center');
  1979.         }
  1980.         try {
  1981.             // Supprimer l'entité
  1982.             $manager->remove($client_compte);
  1983.             $manager->flush();
  1984.             $this->cache->delete('client_compte' $this->id);
  1985.             $this->cache->delete('client_compte_actif' $this->id);
  1986.             $this->vide_cache_centre_groupe($this->id);
  1987.         } catch (ForeignKeyConstraintViolationException $e) {
  1988.             return new Response('cannot_delete_client_compte_associate');
  1989.         }
  1990.         return new Response('ok');
  1991.     }
  1992.     /**
  1993.      * @Route("/admin/client_compte_update/{id}", name="client_compte_update")
  1994.      */
  1995.     public function updateClientCompte(ClientCompte $client_compteRequest $requestObjectManager $manager)
  1996.     {
  1997.         $currentState $client_compte->isCliIsActive();
  1998.         $permissionResult $this->checkPermissionAdmin("ecrire""client_compte");
  1999.         if ($permissionResult instanceof RedirectResponse) {
  2000.             return $permissionResult;
  2001.         }
  2002.         $referer $request->headers->get('referer');
  2003.         if ($client_compte->getCentreGroupe()->getId() !== $this->id) {
  2004.             $this->addFlash('error'"Impossible de mettre à jour le client compte car il n'est pas liée à votre centre.");
  2005.             if ($referer) {
  2006.                 return $this->redirect($referer);
  2007.             } else {
  2008.                 return $this->redirectToRoute('client_compte');
  2009.             }
  2010.         }
  2011.         if (!$request->get('type')) {
  2012.             $this->addFlash('error''Vous n\'avez pas rempli le type de prestation.');
  2013.             if ($referer) {
  2014.                 return $this->redirect($referer);
  2015.             } else {
  2016.                 return $this->redirectToRoute('client_compte');
  2017.             }
  2018.         }
  2019.         if (!$request->get('username')) {
  2020.             $this->addFlash('error''Vous n\'avez pas rempli l\'identifiant.');
  2021.             if ($referer) {
  2022.                 return $this->redirect($referer);
  2023.             } else {
  2024.                 return $this->redirectToRoute('client_compte');
  2025.             }
  2026.         }
  2027.         if (!$request->get('email_cc')) {
  2028.             $this->addFlash('error''Vous n\'avez pas rempli l\email.');
  2029.             if ($referer) {
  2030.                 return $this->redirect($referer);
  2031.             } else {
  2032.                 return $this->redirectToRoute('client_compte');
  2033.             }
  2034.         }
  2035.         if (!$request->get('telephone1')) {
  2036.             $this->addFlash('error''Vous n\'avez pas rempli le numero de téléphone.');
  2037.             if ($referer) {
  2038.                 return $this->redirect($referer);
  2039.             } else {
  2040.                 return $this->redirectToRoute('client_compte');
  2041.             }
  2042.         }
  2043.         if (!$request->get('rue')) {
  2044.             $this->addFlash('error''Vous n\'avez pas rempli la rue.');
  2045.             if ($referer) {
  2046.                 return $this->redirect($referer);
  2047.             } else {
  2048.                 return $this->redirectToRoute('client_compte');
  2049.             }
  2050.         }
  2051.         if (!$request->get('postal')) {
  2052.             $this->addFlash('error''Vous n\'avez pas rempli le code postal.');
  2053.             if ($referer) {
  2054.                 return $this->redirect($referer);
  2055.             } else {
  2056.                 return $this->redirectToRoute('client_compte');
  2057.             }
  2058.         }
  2059.         if (!$request->get('ville')) {
  2060.             $this->addFlash('error''Vous n\'avez pas rempli la ville.');
  2061.             if ($referer) {
  2062.                 return $this->redirect($referer);
  2063.             } else {
  2064.                 return $this->redirectToRoute('client_compte');
  2065.             }
  2066.         }
  2067.         $centre_groupe $this->em->getrepository(CentreGroupe::class)->find($this->id);
  2068.         $client_compte->setCentreGroupe($centre_groupe);
  2069.         //$centre_type = $this->em->getrepository(CentreType::class)->find('');
  2070.         $client_compte->setCentreType(null);
  2071.         $client_compte->setCliNomSociete($request->get('societe'));
  2072.         $client_compte->setCliNom($request->get('nom_cc'));
  2073.         $client_compte->setCliPrenom($request->get('prenom_cc'));
  2074.         $client_compte->setCliTelephone($request->get('telephone1'));
  2075.         $client_compte->setCliUsername($request->get('username'));
  2076.         if ($request->get('mdp') != "") {
  2077.             $hashedPassword $this->passwordHasher->hashPassword(
  2078.                 $client_compte,
  2079.                 $request->get('mdp')
  2080.             );
  2081.             $client_compte->setCliPassword($hashedPassword);
  2082.         }
  2083.         $client_compte->setCliEmail($request->get('email_cc') ? $request->get('email_cc') : '');
  2084.         $client_compte->setCliTelephone2($request->get('telephone2'));
  2085.         $client_compte->setCliFax($request->get('fax'));
  2086.         $client_compte->setCliTva($request->get('tva') ? $request->get('tva') : null);
  2087.         $client_compte->setCliSiren($request->get('siren') ? $request->get('siren') : null);
  2088.         $client_compte->setCliCpl($request->get('cpl') ? $request->get('cpl') : null);
  2089.         $client_compte->setCliContact1Nom($request->get('nom_responsable') ? $request->get('nom_responsable') : null);
  2090.         $client_compte->setCliContact1Prenom($request->get('prenom_responsable') ? $request->get('prenom_responsable') : null);
  2091.         $client_compte->setCliContact1Email($request->get('email_responsable') ? $request->get('email_responsable') : null);
  2092.         $client_compte->setCliContact1Telephone($request->get('telephone_responsable') ? $request->get('telephone_responsable') : null);
  2093.         $client_compte->setCliContact2Nom($request->get('nom_compta') ? $request->get('nom_compta') : null);
  2094.         $client_compte->setCliContact2Prenom($request->get('prenom_compta') ? $request->get('prenom_compta') : null);
  2095.         $client_compte->setCliContact2Email($request->get('email_compta') ? $request->get('email_compta') : null);
  2096.         $client_compte->setCliContact2Telephone($request->get('telephone_compta') ? $request->get('telephone_compta') : null);
  2097.         $client_compte->setCliIsActive($request->get('actif') ? 0);
  2098.         $client_compte->setCliHasProAccess($request->get('pro_access') ? 0);
  2099.         $client_compte->setCliNbJourAlerteEcheance1($request->get('alerte1') ? $request->get('alerte1') : null);
  2100.         $client_compte->setCliNbJourAlerteEcheance2($request->get('alerte2') ? $request->get('alerte2') : null);
  2101.         $client_compte->setCliNbJourAlerteEcheance3($request->get('alerte3') ? $request->get('alerte3') : null);
  2102.         $client_compte->setCliNbJourAlerteEcheanceSms1($request->get('alerteSms1') ? $request->get('alerteSms1') : null);
  2103.         $client_compte->setCliNbJourAlerteEcheanceSms2($request->get('alerteSms2') ? $request->get('alerteSms2') : null);
  2104.         $client_compte->setCliNbJourAlerteEcheanceSms3($request->get('alerteSms3') ? $request->get('alerteSms3') : null);
  2105.         $client_compte->setCliVl(false);
  2106.         $client_compte->setCliPl(false);
  2107.         $client_compte->setCliCl(false);
  2108.         foreach ($request->get('type') as $type) {
  2109.             if ($type == 'VL') {
  2110.                 $client_compte->setCliVl(true);
  2111.             }
  2112.             if ($type == 'PL') {
  2113.                 $client_compte->setCliPl(true);
  2114.             }
  2115.             if ($type == 'CL') {
  2116.                 $client_compte->setCliCl(true);
  2117.             }
  2118.         }
  2119.         $adresse $this->em->getrepository(Adresse::class)->find($request->get('adresseId'));
  2120.         // $adresse->setAdrCoordonnees($request->get(''));
  2121.         $adresse->setAdrRue($request->get('rue'));
  2122.         $adresse->setAdrComplement($request->get('complement'));
  2123.         $adresse->setAdrCodePostal($request->get('postal'));
  2124.         $adresse->setAdrVille($request->get('ville'));
  2125.         $manager->persist($adresse);
  2126.         $client_compte->setAdresse($adresse);
  2127.         if ($request->get('rue_fact') == null && $request->get('postal_fact') == null && $request->get('ville_fact') == null) {
  2128.             $client_compte->setAdresseFacturation($adresse);
  2129.         } else {
  2130.             $adresseFact $this->em->getrepository(Adresse::class)->find($request->get('adresseFactId'));
  2131.             $adresseFact->setAdrRue($request->get('rue_fact'));
  2132.             $adresseFact->setAdrComplement($request->get('complement_fact'));
  2133.             $adresseFact->setAdrCodePostal($request->get('postal_fact'));
  2134.             $adresseFact->setAdrVille($request->get('ville_fact'));
  2135.             $manager->persist($adresseFact);
  2136.             $client_compte->setAdresseFacturation($adresseFact);
  2137.         }
  2138.         $manager->persist($client_compte);
  2139.         $manager->flush();
  2140.         $this->cache->delete('client_compte' $this->id);
  2141.         $this->cache->delete('client_compte_actif' $this->id);
  2142.         if ($client_compte->isCliIsActive() && $client_compte->isCliIsActive() != $currentState && $_SERVER['APP_ENV'] != 'dev') {
  2143.             // demande de cédric et aurélien le 28/05  pour ne pas activer par défaut les compte client pro
  2144.             // mantis num : 0000928
  2145.             $email = (new Email())
  2146.                 ->from('noreply@notification-abs.com')
  2147.                 ->to($client_compte->getCliEmail())
  2148.                 ->subject('Activation de votre Espace Pro sur ' .$request->getSchemeAndHttpHost())
  2149.                 ->html($this->renderView('email/activation_client_compte.html.twig', ['client' => $client_compte'objet' => 'Activation de votre Espace Pro sur ' .$request->getSchemeAndHttpHost()]));
  2150.             $this->mailer->send($email);
  2151.         }
  2152.         $this->addFlash('success''Modification du client enregistré.');
  2153.         if ($referer) {
  2154.             return $this->redirect($referer);
  2155.         } else {
  2156.             return $this->redirectToRoute('client_compte');
  2157.         }
  2158.     }
  2159. // Gestion des Parametres de Centre groupe ----------------------------------------
  2160.     /**
  2161.      * @Route("/admin/parametre_centre_groupe", name="parametre_centre_groupe")
  2162.      */
  2163.     public function paramCentreGroupe(Request $requestObjectManager $manager): Response
  2164.     {
  2165.         $allpermission $this->checkAllPermissionAdmin("parametre_centre_groupe");
  2166.         if (!$allpermission || !$allpermission['lire']) {
  2167.             $this->addFlash('error''Impossible, vous n\'avez pas accés à cette page');
  2168.             return $this->redirectToRoute('admin_erreur');
  2169.         }
  2170.         $data_param_centre_groupes $this->em->getrepository(ParametreCentreGroupe::class)->findOneByCentreGroupe($this->id);
  2171.         $form $this->createForm(ParametreCentreGroupeType::class, $data_param_centre_groupes);
  2172.         $fileLogoCentre $data_param_centre_groupes->getPcgCheminLogo();
  2173.         $form->handleRequest($request);
  2174.         if ($form->isSubmitted() && $form->isValid()) {
  2175.             $permissionResult $this->checkPermissionAdmin("ecrire""parametre_centre_groupe");
  2176.             if ($permissionResult instanceof RedirectResponse) {
  2177.                 return $permissionResult;
  2178.             }
  2179.             $newFileLogoCentre $form->get('pcg_chemin_logo')->getData();
  2180.             // if (is_string($fileLogoCentre)) {
  2181.             //     $fileLogoCentre = new UploadedFile($fileLogoCentre, basename($fileLogoCentre));
  2182.             // }
  2183.             if ($newFileLogoCentre) {
  2184.                 $fileLogoName md5(uniqid()) . '.' $newFileLogoCentre->guessExtension();
  2185.                 $newFileLogoCentre->move(
  2186.                     $this->getParameter('data_directory') . '/' $this->id,
  2187.                     $fileLogoName
  2188.                 );
  2189.                 // Update the entity with the new file name
  2190.                 $data_param_centre_groupes->setPcgCheminLogo($fileLogoName);
  2191.                 if ($fileLogoCentre) {
  2192.                     unlink($this->getParameter('data_directory') . '/' $this->id '/' $fileLogoCentre);
  2193.                 }
  2194.             } else {
  2195.                 $data_param_centre_groupes->setPcgCheminLogo($fileLogoCentre);
  2196.             }
  2197.             $this->cache->delete('param_centre_groupe' $this->id);
  2198.             $manager->persist($data_param_centre_groupes);
  2199.             $manager->flush();
  2200.             $this->vide_cache_centre_groupe($this->id);
  2201.             // Redirection vers la page d'affichage des paramètres du centre enregistrés
  2202.             return $this->redirectToRoute('parametre_centre_groupe');
  2203.         }
  2204.         // Affichage du formulaire
  2205.         return $this->render('admin/parametre_centre_groupe_view.html.twig', [
  2206.             'formParametreCentreGroupe' => $form->createView(),
  2207.             'allpermission' => $allpermission,
  2208.         ]);
  2209.     }
  2210. // Gestion des Parametres de Centre -----------------------------------------------
  2211.     /**
  2212.      * @Route("/admin/parametre_centre/{id_centre}", name="parametre_centre")
  2213.      */
  2214.     public function parametrecentre($id_centreRequest $requestObjectManager $manager): Response
  2215.     {
  2216.         $allpermission $this->checkAllPermissionAdmin("parametre_centre");
  2217.         if (!$allpermission || !$allpermission['lire']) {
  2218.             $this->addFlash('error''Impossible, vous n\'avez pas accés à cette page');
  2219.             return $this->redirectToRoute('admin_erreur');
  2220.         }
  2221.         $access $this->checkUserAccessToCentre($id_centre);
  2222.         if ($access !== true) {
  2223.             return $access;
  2224.         }
  2225.         $data_centres $this->em->getRepository(Centre::class)->findBy(['centre_groupe' => $this->id]);
  2226.         $this_centre ='';
  2227.         $other_centres = [];
  2228.         foreach ($data_centres as $key => $centre) {
  2229.             if ($centre->getId() == $id_centre) {
  2230.                 $this_centre $centre;
  2231.             } else {
  2232.                 $other_centres[] = $centre;
  2233.             }
  2234.         }
  2235.         $data_param_centres $this_centre->getCtrParametreCentre();
  2236.         $data_param_centres_admin $this_centre->getCtrParametreCentreAdmin();
  2237.         $data_holidays $data_param_centres->getHolidays();
  2238.         // Création du formulaire à partir des données des paramètres du centre
  2239.         $formParamCentre $this->createForm(ParametreCentreType::class, $data_param_centres);
  2240.         $fileImgCentre $data_param_centres->getPcCheminImgCentre();
  2241.         $fileCGV $data_param_centres->getPcConditionsChemin();
  2242.         // Gestion de la soumission du formulaire
  2243.         $formParamCentre->handleRequest($request);
  2244.         // Si le formulaire est soumis et valide
  2245.         if ($formParamCentre->isSubmitted() && $formParamCentre->isValid()) {
  2246.             // Gestion de securité verifie si l'utilisateur a les droit de modification sinon renvoie vers la pas d'erreur.
  2247.             $permissionResult $this->checkPermissionAdmin("ecrire""parametre_centre");
  2248.             if ($permissionResult instanceof RedirectResponse) {
  2249.                 return $permissionResult;
  2250.             }
  2251.             $newFileImgCentre $formParamCentre->get('pc_chemin_img_centre')->getData();
  2252.             // if (is_string($newFileImgCentre)) {
  2253.             //     $newFileImgCentre = new UploadedFile($newFileImgCentre, basename($newFileImgCentre));
  2254.             // }
  2255.             if ($newFileImgCentre) {
  2256.                 $fileNameImgCentre md5(uniqid()) . '.' $newFileImgCentre->guessExtension();
  2257.                 $newFileImgCentre->move(
  2258.                     $this->getParameter('data_directory') . '/' $this->id '/' $id_centre,
  2259.                     $fileNameImgCentre
  2260.                 );
  2261.                 // Update the entity with the new file name
  2262.                 $data_param_centres->setPcCheminImgCentre($fileNameImgCentre);
  2263.                 if ($fileImgCentre) {
  2264.                     unlink($this->getParameter('data_directory') . '/' $this->id '/' $id_centre '/' $fileImgCentre);
  2265.                 }
  2266.             } else {
  2267.                 $data_param_centres->setPcCheminImgCentre($fileImgCentre);
  2268.             }
  2269.             $newFileCGV $formParamCentre->get('pc_conditions_chemin')->getData();
  2270.             // if (is_string($fileCGV)) {
  2271.             //     $fileCGV = new UploadedFile($fileCGV, basename($fileCGV));
  2272.             // }
  2273.             if ($newFileCGV) {
  2274.                 $fileNameCGV 'Condition_general' $id_centre '.pdf';
  2275.                 $newFileCGV->move(
  2276.                     $this->getParameter('data_directory') . '/' $this->id '/' $id_centre,
  2277.                     $fileNameCGV
  2278.                 );
  2279.                 // Update the entity with the new file name
  2280.                 $data_param_centres->setPcConditionsChemin($fileNameCGV);
  2281.                 // if($fileCGV) {
  2282.                 //     unlink( $this->getParameter('data_directory').'/'.$this->id.'/'.$fileCGV);
  2283.                 // }
  2284.             } else {
  2285.                 $data_param_centres->setPcConditionsChemin($fileCGV);
  2286.             }
  2287.             // Initialisation d'un tableau des congés fixes
  2288.             $table_holidays = ['jour_an''lundi_paques''1er_mai''8mai''ascension''pentecote''14_juillet''assomption''toussaint''armistice''noel'];
  2289.             // Récupération des congés ajoutés different de la liste des congés fix (jours chomés ajouter)
  2290.             $j_conges array_diff($data_holidays$table_holidays);
  2291.             // Récupération de la liste des congés du centre renvoyer par le formulaire
  2292.             $holidays $data_param_centres->getHolidays();
  2293.             // Vérification si plusieurs jours de congés ont été ajoutés dans le formulaire
  2294.             if (is_array($j_conges)) {
  2295.                 // Parcours de tous les jours de congés ajoutés
  2296.                 foreach ($j_conges as $j_conge) {
  2297.                     // Vérification si le jour de congé n'existe pas déjà dans la liste des jours de congés
  2298.                     if (!in_array($j_conge$holidays)) {
  2299.                         // Ajout du jour de congé dans la liste des jours de congés
  2300.                         $holidays[] = $j_conge;
  2301.                     }
  2302.                 }
  2303.                 // Si $j_conges n'est pas un tableau
  2304.             } else {
  2305.                 // Vérification si le jour de congé n'existe pas déjà dans la liste des jours de congés
  2306.                 if (!in_array($j_conges$holidays)) {
  2307.                     // Ajout du jour de congé dans la liste des jours de congés
  2308.                     $holidays[] = $j_conges;
  2309.                 }
  2310.             }
  2311.             // Mise à jour de la liste des jours fériés dans les paramètres du centre
  2312.             $data_param_centres->setHolidays($holidays);
  2313.             $trou false;
  2314.             if ($request->get("remplir_trou") === '1') {
  2315.                 $trou true;
  2316.             }
  2317.             $data_param_centres_admin->setPcaCalendrierRemplirTrou($trou);
  2318.             if($data_param_centres->isIsBlockRdv()) {
  2319.                 if($data_param_centres->getNbHoursBlockRdv() === null) {
  2320.                     $this->addFlash('error''Veuillez ajouter le nombre d\'heure pour le blocage');
  2321.                     return $this->redirectToRoute('parametre_centre', ['id_centre' => $id_centre]);
  2322.                 }
  2323.             }
  2324.             $manager->persist($data_param_centres);
  2325.             $manager->persist($data_param_centres_admin);
  2326.             $manager->flush();
  2327.             $this->vide_cache_centre_groupe($this->id);
  2328.             $this->cache->delete('param_centre');
  2329.             // Redirection vers la page d'affichage des paramètres du centre enregistrés
  2330.             return $this->redirectToRoute('parametre_centre', ['id_centre' => $id_centre]);
  2331.         }
  2332.         // Affichage du formulaire
  2333.         return $this->render('admin/parametre_centre_view.html.twig', [
  2334.             'centreName' => $this_centre->getCtrNom(),
  2335.             'idCentreType' => $this_centre->getCentreType()->getId(),
  2336.             'other_centres' => $other_centres,
  2337.             'formParametreCentre' => $formParamCentre->createView(),
  2338.             'holidays' => $data_holidays,
  2339.             'idCentre' => $id_centre,
  2340.             'idCentreGroupe' => $this->id,
  2341.             'allpermission' => $allpermission,
  2342.             'paramAdmin' => $data_param_centres_admin,
  2343.             'envoiSms' => $data_param_centres->isPcEnvoiSms(),
  2344.             'rappelSms' => $data_param_centres->isPcRappelSms(),
  2345.             'envoiSmsAvis' => $data_param_centres->isPcEnvoiSmsAvis(),
  2346.             'envoiEmailAvis' => $data_param_centres->isPcEnvoiEmailAvis(),
  2347.         ]);
  2348.     }
  2349.     /**
  2350.      * @Route("/admin/add_holiday/{id_centre}", name="add_holiday", methods={"POST"})
  2351.      */
  2352.     public function addHoliday($id_centreRequest $requestObjectManager $manager)
  2353.     {
  2354.         $permissionResult $this->checkPermissionAdmin("ecrire""parametre_centre");
  2355.         if ($permissionResult instanceof RedirectResponse) {
  2356.             return $permissionResult;
  2357.         }
  2358.         $access $this->checkUserAccessToCentre($id_centre);
  2359.         if ($access !== true) {
  2360.             return $access;
  2361.         }
  2362.         /** @var Centre $centre */
  2363.         $centre $this->em->getrepository(Centre::class)->find($id_centre);
  2364.         $data_param_centres $this->em->getrepository(ParametreCentre::class)->find($centre->getCtrParametreCentre()->getId());
  2365.         // Récupération des jours de congés ajoutés dans le formulaire
  2366.         $j_conges $request->request->get('j_conges');
  2367.         // Récupération des jours de congés existants
  2368.         $holidays $data_param_centres->getHolidays();
  2369.         // Vérification si plusieurs jours de congés ont été ajoutés dans le formulaire
  2370.         if (is_array($j_conges)) {
  2371.             // Parcours de tous les jours de congés ajoutés
  2372.             foreach ($j_conges as $j_conge) {
  2373.                 // Conversion de la date au format Y-m-d vers le format d/m/Y
  2374.                 $date DateTime::createFromFormat('Y-m-d'$j_conge);
  2375.                 $j_conge $date->format('d/m/Y');
  2376.                 // Vérification si le jour de congé n'existe pas déjà dans la liste des jours de congés
  2377.                 if (!in_array($j_conge$holidays)) {
  2378.                     // Ajout du jour de congé dans la liste des jours de congés
  2379.                     $holidays[] = $j_conge;
  2380.                 }
  2381.             }
  2382.             // Si un seul jour de congé a été ajouté dans le formulaire
  2383.         } else {
  2384.             // Conversion de la date au format Y-m-d vers le format d/m/Y
  2385.             $date DateTime::createFromFormat('Y-m-d'$j_conges);
  2386.             $j_conges $date->format('d/m/Y');
  2387.             // Vérification si le jour de congé n'existe pas déjà dans la liste des jours de congés
  2388.             if (!in_array($j_conges$holidays)) {
  2389.                 // Ajout du jour de congé dans la liste des jours de congés
  2390.                 $holidays[] = $j_conges;
  2391.             }
  2392.         }
  2393.         // Mise à jour de la liste des jours fériés dans les paramètres du centre
  2394.         $data_param_centres->setHolidays($holidays);
  2395.         $manager->persist($data_param_centres);
  2396.         $manager->flush();
  2397.         return new Response('ok');
  2398.     }
  2399.     /**
  2400.      * @Route("/admin/supp_holiday/{id_centre}", name="supp_holiday", methods={"POST"})
  2401.      */
  2402.     public function suppHoliday($id_centreRequest $requestObjectManager $manager)
  2403.     {
  2404.         $permissionResult $this->checkPermissionAdmin("ecrire""parametre_centre");
  2405.         if ($permissionResult instanceof RedirectResponse) {
  2406.             return $permissionResult;
  2407.         }
  2408.         $access $this->checkUserAccessToCentre($id_centre);
  2409.         if ($access !== true) {
  2410.             return $access;
  2411.         }
  2412.         /** @var Centre $centre */
  2413.         $centre $this->em->getrepository(Centre::class)->find($id_centre);
  2414.         $data_param_centres $this->em->getrepository(ParametreCentre::class)->find($centre->getCtrParametreCentre()->getId());
  2415.         // Récupération de la liste des congés retourné
  2416.         $j_conge $request->request->get('j_conges');
  2417.         // Récupération de la liste des jours fériés en BDD
  2418.         $holidays $data_param_centres->getHolidays();
  2419.         $key array_search($j_conge$holidays);
  2420.         unset($holidays[$key]);
  2421.         // Mise à jour de la liste des jours fériés dans les paramètres du centre
  2422.         $data_param_centres->setHolidays($holidays);
  2423.         $manager->persist($data_param_centres);
  2424.         $manager->flush();
  2425.         return new Response('ok');
  2426.     }
  2427.     /**
  2428.      * @Route("/admin/copie_parametres/{type}", name="copie_parametres", methods={"POST"})
  2429.      */
  2430.     public function copieParametres(Request $request$type)
  2431.     {
  2432.         $permissionResult $this->checkPermissionAdmin("ecrire""parametre_centre");
  2433.         if ($permissionResult instanceof RedirectResponse) {
  2434.             return $permissionResult;
  2435.         }
  2436.         $access $this->checkUserAccessToCentre($request->get('thisCentreId'));
  2437.         if ($access !== true) {
  2438.             return $access;
  2439.         }
  2440.         if (!$request->get('thisCentreId') || !$request->get('otherCentreId')) {
  2441.             return new JsonResponse(['error' => 'Identifiants de centre non spécifiés ou invalides.'], 400);
  2442.         }
  2443.         $data_centre $this->em->getrepository(Centre::class)->find($request->get('thisCentreId'));
  2444.         $data_other_centre $this->em->getrepository(Centre::class)->find($request->get('otherCentreId'));
  2445.         if (empty($data_centre) || empty($data_other_centre)) {
  2446.             return new JsonResponse(['error' => 'Aucun centres n’ont été trouvés.'], 404);
  2447.         }
  2448.         $data_other_param_centre $data_other_centre->getCtrParametreCentre();
  2449.         switch ($type) {
  2450.             case 'jours_feries':
  2451.                 $data_other_param_centre->setHolidays($data_centre->getCtrParametreCentre()->getHolidays());
  2452.                 break;
  2453.             case 'energies':
  2454.                 $data_other_param_centre->setEnergies($data_centre->getCtrParametreCentre()->getEnergies());
  2455.                 break;
  2456.             case 'messages':
  2457.                 $data_other_param_centre->setPcMessageConfSms($data_centre->getCtrParametreCentre()->getPcMessageConfSms());
  2458.                 $data_other_param_centre->setPcMessageRappelSms($data_centre->getCtrParametreCentre()->getPcMessageRappelSms());
  2459.                 $data_other_param_centre->setPcMessageAnnulSms($data_centre->getCtrParametreCentre()->getPcMessageAnnulSms());
  2460.                 $data_other_param_centre->setPcMessageAvisGoogleSms($data_centre->getCtrParametreCentre()->getPcMessageAvisGoogleSms());
  2461.                 break;
  2462.             case 'email':
  2463.                 $data_other_param_centre->setPcEmailConfCustom($data_centre->getCtrParametreCentre()->getPcEmailConfCustom());
  2464.                 break;
  2465.             default:
  2466.                 return new JsonResponse(['error' => 'Type de paramètre non supporté.'], 400);
  2467.         }
  2468.         $this->em->persist($data_other_param_centre);
  2469.         $this->em->flush();
  2470.         return new JsonResponse(['success' => "Les paramètres de type '{$type}' ont été copiés avec succès."]);
  2471.     }
  2472. // Prévisualisation email avis Google -------------------------------------------------------
  2473.     /**
  2474.      * @Route("/admin/preview-email-avis", name="preview_email_avis")
  2475.      */
  2476.     public function previewEmailAvis(Request $request): Response
  2477.     {
  2478.         $nomCentre strip_tags($request->query->get('nom_centre''Centre Auto'));
  2479.         $lienAvis  strip_tags($request->query->get('lien_avis''https://search.google.com/local/writereview?placeid=EXEMPLE'));
  2480.         return $this->render('email/avis_google.html.twig', [
  2481.             'prenom'     => 'Jean',
  2482.             'nom'        => 'Dupont',
  2483.             'nom_centre' => $nomCentre,
  2484.             'lien_avis'  => $lienAvis,
  2485.         ]);
  2486.     }
  2487. // Prévisualisation email confirmation RDV centre -----------------------------------
  2488.     /**
  2489.      * @Route("/admin/preview-email-confirmation-rdv/{id_centre}", name="preview_email_confirmation_rdv_centre")
  2490.      */
  2491.     public function previewEmailConfirmationRdvCentre($id_centre): Response
  2492.     {
  2493.         $centre $this->em->getRepository(Centre::class)->find($id_centre);
  2494.         if (!$centre) {
  2495.             throw $this->createNotFoundException('Centre introuvable.');
  2496.         }
  2497.         $rdv $this->em->getRepository(Rendezvous::class)->findOneBy(
  2498.             ['centre' => $centre],
  2499.             ['id' => 'DESC']
  2500.         );
  2501.         if (!$rdv) {
  2502.             return new Response('<p style="font-family:sans-serif;padding:20px;">Aucun rendez-vous trouvé pour ce centre. Un aperçu sera disponible après le premier rendez-vous.</p>');
  2503.         }
  2504.         $rdvFact $this->em->getRepository(RendezVousFacturation::class)->findOneBy(['rendezvous' => $rdv->getId()]);
  2505.         return $this->render('email/confirmation_rdv_email_centre.html.twig', [
  2506.             'rdv'      => $rdv,
  2507.             'rdv_fact' => $rdvFact,
  2508.             'objet'    => 'Notification nouveau rendez-vous depuis MercureWeb',
  2509.         ]);
  2510.     }
  2511. // Gestion des Infos centre -------------------------------------------------------
  2512.     /**
  2513.      * @Route("/admin/info_centre/{id_centre}", name="info_centre")
  2514.      */
  2515.     public function infoCentre($id_centreRequest $requestObjectManager $manager): Response
  2516.     {
  2517.         $allpermission $this->checkAllPermissionAdmin("info_centre");
  2518.         if (!$allpermission || !$allpermission['lire']) {
  2519.             $this->addFlash('error''Impossible, vous n\'avez pas accés à cette page');
  2520.             return $this->redirectToRoute('admin_erreur');
  2521.         }
  2522.         $access $this->checkUserAccessToCentre($id_centre);
  2523.         if ($access !== true) {
  2524.             return $access;
  2525.         }
  2526.         $data_centres $this->em->getrepository(Centre::class)->find($id_centre);
  2527.         $data_adresse $this->em->getrepository(Adresse::class)->find($data_centres->getctradresse());
  2528.         $formCentre $this->createForm(CentreFormType::class, $data_centres);
  2529.         $formCentreAdresse $this->createForm(AdresseType::class, $data_adresse);
  2530.         
  2531.         // Gestion de la soumission du formulaire
  2532.         $formCentre->handleRequest($request);
  2533.         $formCentreAdresse->handleRequest($request);
  2534.         $originalCtrAgrement $data_centres->getCtrAgrement();
  2535.         $originalCentreType $data_centres->getCentreType();
  2536.         // Si le formulaire est soumis et valide
  2537.         if ($formCentre->isSubmitted() && $formCentre->isValid()) {
  2538.             $permissionResult $this->checkPermissionAdmin("ecrire""info_centre");
  2539.             if ($permissionResult instanceof RedirectResponse) {
  2540.                 return $permissionResult;
  2541.             }
  2542.             $data_centres->setCtrAgrement($originalCtrAgrement);
  2543.             $data_centres->setCentreType($originalCentreType);
  2544.             $manager->persist($data_centres);
  2545.             $manager->flush();
  2546.             // $this->cache->delete('info_centre'. $this->id);
  2547.             $this->vide_cache_centre_groupe($this->id);
  2548.             // Redirection vers la page d'affichage des paramètres du centre enregistrés
  2549.             return $this->redirectToRoute('info_centre', ['id_centre' => $data_centres->getId()]);
  2550.         }
  2551.         if ($formCentreAdresse->isSubmitted() && $formCentreAdresse->isValid()) {
  2552.             $permissionResult $this->checkPermissionAdmin("ecrire""info_centre");
  2553.             if ($permissionResult instanceof RedirectResponse) {
  2554.                 return $permissionResult;
  2555.             }
  2556.             
  2557.             $manager->persist($data_adresse);
  2558.             $manager->flush();
  2559.             
  2560.             $this->vide_cache_centre_groupe($this->id);
  2561.             // $this->cache->delete('info_centre'. $this->id);
  2562.             // Redirection vers la page d'affichage des paramètres du centre enregistrés
  2563.             return $this->redirectToRoute('info_centre', ['id_centre' => $data_centres->getId()]);
  2564.         }
  2565.         // , ['id'=> $data_param_centre_groupes->getId()]
  2566.         // Affichage du formulaire
  2567.         return $this->render('admin/info_centre_view.html.twig', [
  2568.             'centreName' => $data_centres->getCtrNom(),
  2569.             'formCentre' => $formCentre->createView(),
  2570.             'formCentreAdresse' => $formCentreAdresse->createView(),
  2571.             'allpermission' => $allpermission,
  2572.         ]);
  2573.     }
  2574. // Gestion des Horaire d'ouverture ------------------------------------------------
  2575.     /**
  2576.      * @Route("/admin/centre_horaire/{id_centre}", name="centre_horaire")
  2577.      */
  2578.     public function centreHoraire($id_centreRequest $requestObjectManager $manager): Response
  2579.     {
  2580.         $allpermission $this->checkAllPermissionAdmin("centre_horaire");
  2581.         if (!$allpermission || !$allpermission['lire']) {
  2582.             $this->addFlash('error''Impossible, vous n\'avez pas accés à cette page');
  2583.             return $this->redirectToRoute('admin_erreur');
  2584.         }
  2585.         $access $this->checkUserAccessToCentre($id_centre);
  2586.         if ($access !== true) {
  2587.             return $access;
  2588.         }
  2589.         $data_centre_horaires $this->cache->get('centre_horaire' $id_centre, function () use ($id_centre) {
  2590.             $data_centre_horaires $this->em->getrepository(CentreHoraire::class)->findByCentre($id_centre);
  2591.             return $data_centre_horaires;
  2592.         });
  2593.         $data_centres $this->em->getRepository(Centre::class)->findBy(['centre_groupe' => $this->id]);
  2594.         $this_centre ='';
  2595.         $other_centres = [];
  2596.         foreach ($data_centres as $key => $centre) {
  2597.             if ($centre->getId() == $id_centre) {
  2598.                 $this_centre $centre;
  2599.             } else {
  2600.                 $other_centres[] = $centre;
  2601.             }
  2602.         }
  2603.         $this->cache->delete('centre_horaire' $id_centre);
  2604.         // Affichage du formulaire
  2605.         return $this->render('admin/centre_horaire_view.html.twig', [
  2606.             'centre_horaires' => $data_centre_horaires,
  2607.             'centre' => $this_centre,
  2608.             'other_centres' => $other_centres,
  2609.             'allpermission' => $allpermission,
  2610.         ]);
  2611.     }
  2612.     /**
  2613.      * @Route("/admin/copie_horaire_centre", name="copie_horaire_centre", methods={"POST"})
  2614.      */
  2615.     public function copieHoraireCentre(Request $request)
  2616.     {
  2617.         $permissionResult $this->checkPermissionAdmin("ecrire""centre_horaire");
  2618.         if ($permissionResult instanceof RedirectResponse) {
  2619.             return $permissionResult;
  2620.         }
  2621.         $access $this->checkUserAccessToCentre($request->get('thisCentreId'));
  2622.         if ($access !== true) {
  2623.             return $access;
  2624.         }
  2625.         if (!$request->get('thisCentreId') || !$request->get('centreId')) {
  2626.             return new JsonResponse([
  2627.                 'error' => 'Identifiants de centre non spécifiés ou invalides.'
  2628.             ], 400);
  2629.         }
  2630.         $thisCentreHoraires $this->em->getrepository(CentreHoraire::class)->findBy(['centre' => $request->get('thisCentreId')]);
  2631.         $otherCentreHoraires $this->em->getrepository(CentreHoraire::class)->findBy(['centre' => $request->get('centreId')]);
  2632.         if (empty($thisCentreHoraires) || empty($otherCentreHoraires)) {
  2633.             return new JsonResponse([
  2634.                 'error' => 'Aucun horaire trouvé pour les centres spécifiés.'
  2635.             ], 404);
  2636.         }
  2637.         $thisDay null;
  2638.         $otherDay null;
  2639.         $matin true;
  2640.         $matinOther true;
  2641.         foreach ($thisCentreHoraires as $thisHoraire) {
  2642.             if ($thisDay == $thisHoraire->getCtrHorJoursSemaine()) {
  2643.                 $matin false;
  2644.             } else {
  2645.                 $matin true;
  2646.             }
  2647.             $thisDay $thisHoraire->getCtrHorJoursSemaine();
  2648.             foreach ($otherCentreHoraires as $otherHoraire) {
  2649.                 if ($otherDay == $otherHoraire->getCtrHorJoursSemaine()) {
  2650.                     $matinOther false;
  2651.                 } else {
  2652.                     $matinOther true;
  2653.                 }
  2654.                 $otherDay $otherHoraire->getCtrHorJoursSemaine();
  2655.                 if (($thisHoraire->getCtrHorJoursSemaine() === $otherHoraire->getCtrHorJoursSemaine()) && $matin && $matinOther) {
  2656.                     $this->applyChanges($thisHoraire$otherHoraire);
  2657.                 } else if (($thisHoraire->getCtrHorJoursSemaine() === $otherHoraire->getCtrHorJoursSemaine()) && !$matin && !$matinOther) {
  2658.                     $this->applyChanges($thisHoraire$otherHoraire);
  2659.                 }
  2660.             }
  2661.         }
  2662.         $this->em->flush();
  2663.         return new JsonResponse([
  2664.             'success' => 'Les horaires ont été copiés avec succès.'
  2665.         ]);;
  2666.     }
  2667.     private function applyChanges($sourceHoraire$targetHoraire) {
  2668.         $targetHoraire->setCtrHorDebut($sourceHoraire->getCtrHorDebut());
  2669.         $targetHoraire->setCtrHorFin($sourceHoraire->getCtrHorFin());
  2670.         $targetHoraire->setCtrHorOuvert($sourceHoraire->isCtrHorOuvert());
  2671.         $targetHoraire->setCtrHorJourContinue($sourceHoraire->isCtrHorJourContinue());
  2672.         $this->em->persist($targetHoraire);
  2673.     }
  2674.     /**
  2675.      * @Route("/admin/centre_horaires_update/{id_centre}/{id_centre_horaire}", name="centre_horaires_update")
  2676.      */
  2677.     public function updateCentreHoraire($id_centre$id_centre_horaireRequest $requestObjectManager $manager)
  2678.     {
  2679.         $permissionResult $this->checkPermissionAdmin("ecrire""centre_horaire");
  2680.         if ($permissionResult instanceof RedirectResponse) {
  2681.             return $permissionResult;
  2682.         }
  2683.         $access $this->checkUserAccessToCentre($id_centre);
  2684.         if ($access !== true) {
  2685.             return $access;
  2686.         }
  2687.         // $centre = $this->em->getrepository(Centre::class)->find($id_centre);
  2688.         $centre_horaire $this->em->getrepository(CentreHoraire::class)->find($id_centre_horaire);
  2689.         // $centre_horaire->setCentre($centre);
  2690.         $centre_horaire->setCtrHorDebut(new Datetime($request->get('heure_debut')));
  2691.         $centre_horaire->setCtrHorFin(new Datetime($request->get('heure_fin')));
  2692.         $centre_horaire->setCtrHorOuvert($request->get('ouvert') ? 0);
  2693.         $centre_horaire->setCtrHorJourContinue($request->get('continue') ? 0);
  2694.         $manager->persist($centre_horaire);
  2695.         $manager->flush();
  2696.         $this->cache->delete('centre_horaire' $id_centre);
  2697.         return $this->redirectToRoute('centre_horaire', ['id_centre' => $id_centre]);
  2698.     }
  2699. // Gestion des Utilisateurs -------------------------------------------------------
  2700.     /**
  2701.      * @Route("/admin/profil", name="profil")
  2702.      */
  2703.     public function profil(Request $requestObjectManager $manager): Response
  2704.     {
  2705.         $utilisateur $this->em->getRepository(Utilisateur::class)->find($this->getUser());
  2706.         $formUtilisateur $this->createForm(UtilisateurType::class, $utilisateur);
  2707.         $formUtilisateur->handleRequest($request);
  2708.         if ($formUtilisateur->isSubmitted() && $formUtilisateur->isValid()) {
  2709.             $plainPassword $formUtilisateur->get('utl_password')->getData();
  2710.             if ($plainPassword) {
  2711.                 $hashedPassword $this->passwordHasher->hashPassword(
  2712.                     $utilisateur,
  2713.                     $plainPassword
  2714.                 );
  2715.                 $utilisateur->setUtlPassword($hashedPassword);
  2716.             }
  2717.             $manager->persist($utilisateur);
  2718.             $manager->flush();
  2719.             $this->cache->delete('utilisateur' $this->id);
  2720.             $this->addFlash('success''Votre profil a été mis à jour avec succès.');
  2721.             return $this->redirectToRoute('profil');
  2722.         }
  2723.         return $this->render('admin/profil_view.html.twig', [
  2724.             'utilisateur' => $utilisateur,
  2725.             'profilName' => $utilisateur->getUtlUsername(),
  2726.             'formUtilisateur' => $formUtilisateur->createView(),
  2727.         ]);
  2728.     }
  2729.     /**
  2730.      * @Route("/admin/utilisateur", name="utilisateur")
  2731.      */
  2732.     public function utilisateur()
  2733.     {
  2734.         $allpermission $this->checkAllPermissionAdmin("utilisateur");
  2735.         if (!$allpermission || !$allpermission['lire']) {
  2736.             $this->addFlash('error''Impossible, vous n\'avez pas accés à cette page');
  2737.             return $this->redirectToRoute('admin_erreur');
  2738.         }
  2739.         $centreFonctions $this->em->getRepository(CentreFonction::class)->findBy(['CentreGroupe' => $this->id]);
  2740.         $utilisateurInfoRepository $this->em->getRepository(UtilisateurInfo::class);
  2741.         $utilisateurs = [];
  2742.         foreach ($centreFonctions as $fonction) {
  2743.             /** @var UtilisateurInfo $utilisateurInf  */
  2744.             $utilisateurInf $utilisateurInfoRepository->findBy(['utl_inf_fonction' => $fonction->getId()]);
  2745.             if (!is_null($utilisateurInf)) {
  2746.                 foreach ($utilisateurInf as $util) {
  2747.                     $utilisateurs[] = $util->getUtlInfUtilisateur();
  2748.                 }
  2749.             }
  2750.         }
  2751.         $final = [];
  2752.         foreach ($utilisateurs as $utilisateur) {
  2753.             if (!in_array($utilisateur$final)) {
  2754.                 $final[] = $utilisateur;
  2755.             }
  2756.         }
  2757.         $user $this->getUser();
  2758.         $centreGroupe $this->em->getRepository(CentreGroupe::class)->find($this->id);
  2759.         $centres = [];
  2760.         if ($centreGroupe->getCgGerant()) {
  2761.             $centreGroupeByGerants $this->em->getRepository(CentreGroupe::class)->findBy(['cg_gerant' => $centreGroupe->getCgGerant()->getId()]);
  2762.             foreach ($centreGroupeByGerants as $centreGroupeByGerant) {
  2763.                 $allFonction $this->em->getRepository(CentreFonction::class)->findBy(['CentreGroupe' => $centreGroupeByGerant->getId()]);
  2764.                 $centres[] = ['centreGroupe' => $centreGroupeByGerant'fonctions' => $allFonction];
  2765.             }
  2766.         }
  2767.         if ($centres === []) {
  2768.             $centres[] = ['centreGroupe' => $centreGroupe'fonctions' => $centreFonctions];
  2769.         }
  2770.         return $this->render('admin/utilisateur_view.html.twig', [
  2771.             'utilisateurs' => $final,
  2772.             'currentUser' => $user,
  2773.             'fonctions' => $centreFonctions,
  2774.             'allpermission' => $allpermission,
  2775.             'centres' => $centres
  2776.         ]);
  2777.     }
  2778.     /**
  2779.      * @Route("/admin/utilisateur/get/{id}", name="utilisateurGet")
  2780.      */
  2781.     public function utilisateurGet(int $id)
  2782.     {
  2783.         $allpermission $this->checkAllPermissionAdmin("utilisateur");
  2784.         if (!$allpermission || !$allpermission['lire']) {
  2785.             return new JsonResponse('ko');
  2786.         }
  2787.         $utilisateur $this->em->getRepository(Utilisateur::class)->find($id);
  2788.         $fonctions = [];
  2789.         $fonctionName '';
  2790.         foreach ($utilisateur->getUtilisateurInfos() as $info) {
  2791.             $fonctions[] =  $info->getUtlInfFonction()->getId();
  2792.             $fonctionName $info->getUtlInfFonction()->getFctNom();
  2793.         }
  2794.         $utilisateurArr = [
  2795.             'username' => $utilisateur->getUsername(),
  2796.             'nom' => $utilisateur->getUtlNom(),
  2797.             'prenom' => $utilisateur->getUtlPrenom(),
  2798.             'mail' => $utilisateur->getUtlEmail(),
  2799.             'agrement' => $utilisateur->getUtlAgrement(),
  2800.             'masque' => $utilisateur->isUtlIsMasked(),
  2801.             'fonctions' => $fonctions,
  2802.             'fonctionName' => $fonctionName
  2803.         ];
  2804.         return new JsonResponse($utilisateurArr);
  2805.     }
  2806.     /**
  2807.      * @Route("/admin/utilisateur_add", name="utilisateur_add")
  2808.      */
  2809.     public function AddUtilisateur(Request $requestObjectManager $manager)
  2810.     {
  2811.         $permissionResult $this->checkPermissionAdmin("ecrire""utilisateur");
  2812.         if ($permissionResult instanceof RedirectResponse) {
  2813.             return $permissionResult;
  2814.         }
  2815.         $centre_groupe $this->em->getRepository(CentreGroupe::class)->find($this->id);
  2816.         $username $request->get('user');
  2817.         $nom $request->get('nom');
  2818.         $prenom $request->get('prenom');
  2819.         $email $request->get('email');
  2820.         $mdp $request->get('mdp');
  2821.         $mdp_conf $request->get('mdp_conf');
  2822.         $data $request->request->all();
  2823.         $idCentreArr = [];
  2824.         foreach ($data as $key => $input) {
  2825.             if ($input) {
  2826.                 $keyCentre substr($key07);
  2827.                 if ($keyCentre === 'centre_') {
  2828.                     $centreArr explode('_'$key);
  2829.                     $idCentreArr[intval($centreArr[1])] = $input;
  2830.                 }
  2831.             }
  2832.         }
  2833.         // Vérifier si tous les champs sont remplis
  2834.         if (!$username || !$nom || !$prenom || !$mdp || !$mdp_conf) {
  2835.             // Rediriger vers la même page avec un message d'erreur
  2836.             return $this->redirectToRoute('utilisateur', ['error' => 'Veuillez remplir tous les champs.']);
  2837.         }
  2838.         // Vérifier si les mots de passe correspondent
  2839.         if ($mdp != $mdp_conf) {
  2840.             // Rediriger vers la même page avec un message d'erreur
  2841.             return $this->redirectToRoute('utilisateur', ['error' => 'Les mots de passe ne correspondent pas.']);
  2842.         }
  2843.         if (strlen($mdp) < || !preg_match('/[A-Z]/'$mdp) || !preg_match('/\d/'$mdp)) {
  2844.             // Retourner une erreur si le mot de passe ne répond pas aux exigences
  2845.             // Ceci est juste un exemple, vous devrez peut-être ajuster ceci pour qu'il fonctionne avec votre code existant
  2846.             throw new \Exception("Le mot de passe doit comprendre au moins 5 caractères, dont une majuscule et un chiffre.");
  2847.         }
  2848.         $checkUser $this->em->getRepository(Utilisateur::class)->findBy(['utl_username' => $username]);
  2849.         if ($checkUser) {
  2850.             return $this->redirectToRoute('utilisateur', ['error' => "Ce nom d'utilisateur est déjà utilisé."]);
  2851.         }
  2852.         $utilisateur = new Utilisateur;
  2853.         $utilisateur->setCentreGroupe($centre_groupe);
  2854.         $utilisateur->setUtlUsername($username);
  2855.         $utilisateur->setUtlAgrement(null);
  2856.         $utilisateur->setUtlNom($nom);
  2857.         $utilisateur->setUtlPrenom($prenom);
  2858.         $utilisateur->setUtlEmail($email);
  2859.         $utilisateur->setUtlIsMasked($request->get('masque') ? 0);
  2860.         $hashedPassword $this->passwordHasher->hashPassword(
  2861.             $utilisateur,
  2862.             $mdp
  2863.         );
  2864.         $utilisateur->setUtlPassword($hashedPassword);
  2865.         //!!!!!!!!!!!!!!!!!!!!!!!! A verifier !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  2866.         $utilisateur->setUtlPrestataire($request->get('utl_prestataire') ? 0);
  2867.         $manager->persist($utilisateur);
  2868.         $manager->flush();
  2869.         if ($idCentreArr != []) {
  2870.             foreach ($idCentreArr as $fonction) {
  2871.                 if ($fonction != 'none') {
  2872.                     $fonctionRepository $this->em->getRepository(CentreFonction::class);
  2873.                     $currentFonction $fonctionRepository->find(intval($fonction));
  2874.                     $utilisateurInfo = new UtilisateurInfo();
  2875.                     $utilisateurInfo->setUtlInfUtilisateur($utilisateur);
  2876.                     $utilisateurInfo->setUtlInfFonction($currentFonction);
  2877.                     $manager->persist($utilisateurInfo);
  2878.                 }
  2879.             }
  2880.         }
  2881.         $manager->flush();
  2882.         $this->cache->delete('utilisateur' $this->id);
  2883.         return $this->redirectToRoute('utilisateur', ['success' => 'L\'utilisateur a bien été enregistré.']);
  2884.     }
  2885.     /**
  2886.      * @Route("/admin/utilisateur_delete/{id}", name="utilisateur_delete")
  2887.      */
  2888.     public function deleteUtilisateur(Utilisateur $utilisateurObjectManager $manager)
  2889.     {
  2890.         $permissionResult $this->checkPermissionAdmin("supp""utilisateur");
  2891.         if ($permissionResult instanceof RedirectResponse) {
  2892.             return $permissionResult;
  2893.         }
  2894.         if ($utilisateur->getCentreGroupe()->getId() !== $this->id) {
  2895.             return new Response('cannot_delete_user_another_center');
  2896.         }
  2897.         // Supprimer l'entité
  2898.         foreach ($utilisateur->getUtilisateurInfos() as $utilisateurInfo) {
  2899.             $manager->remove($utilisateurInfo);
  2900.         }
  2901.         $manager->remove($utilisateur);
  2902.         $manager->flush();
  2903.         $this->cache->delete('utilisateur' $this->id);
  2904.         $this->vide_cache_centre_groupe($this->id);
  2905.         // Rediriger l'utilisateur vers la liste des produits
  2906.         return new Response('ok');
  2907.     }
  2908.     /**
  2909.      * @Route("/admin/utilisateur_update/{id}", name="utilisateur_update")
  2910.      */
  2911.     public function updateUtilisateur(Utilisateur $utilisateurRequest $requestObjectManager $managerSessionInterface $session)
  2912.     {
  2913.         $permissionResult $this->checkPermissionAdmin("ecrire""utilisateur");
  2914.         if ($permissionResult instanceof RedirectResponse) {
  2915.             return $permissionResult;
  2916.         }
  2917.         $centre_groupe $this->em->getRepository(CentreGroupe::class)->find($this->id);
  2918.         $username $request->get('user');
  2919.         $nom $request->get('nom');
  2920.         $prenom $request->get('prenom');
  2921.         $email $request->get('email');
  2922.         $mdp $request->get('mdp');
  2923.         $mdp_conf $request->get('mdp_conf');
  2924.         $data $request->request->all();
  2925.         $idCentreArr = [];
  2926.         foreach ($data as $key => $input) {
  2927.             if ($input) {
  2928.                 $keyCentre substr($key07);
  2929.                 if ($keyCentre === 'centre_') {
  2930.                     $centreArr explode('_'$key);
  2931.                     $idCentreArr[intval($centreArr[1])] = $input;
  2932.                 }
  2933.             }
  2934.         }
  2935.         // Vérifier si tous les champs sont remplis
  2936.         if (!$username || !$nom || !$prenom) {
  2937.             // Rediriger vers la même page avec un message d'erreur
  2938.             return $this->redirectToRoute('utilisateur', ['error' => 'Veuillez remplir tous les champs.']);
  2939.         }
  2940.         $utilisateur->setCentreGroupe($centre_groupe);
  2941.         $utilisateur->setUtlAgrement(null);
  2942.         $utilisateur->setUtlNom($nom);
  2943.         $utilisateur->setUtlPrenom($prenom);
  2944.         $utilisateur->setUtlEmail($email);
  2945.         $utilisateur->setUtlIsMasked($request->get('masque') ? 0);
  2946.         if ($mdp || $mdp_conf) {
  2947.             // Vérifier si les mots de passe correspondent
  2948.             if ($mdp != $mdp_conf) {
  2949.                 // Rediriger vers la même page avec un message d'erreur
  2950.                 return $this->redirectToRoute('utilisateur', ['error' => 'Les mots de passe ne correspondent pas.']);
  2951.             }
  2952.             if (strlen($mdp) < || !preg_match('/[A-Z]/'$mdp) || !preg_match('/\d/'$mdp)) {
  2953.                 // Retourner une erreur si le mot de passe ne répond pas aux exigences
  2954.                 // Ceci est juste un exemple, vous devrez peut-être ajuster ceci pour qu'il fonctionne avec votre code existant
  2955.                 throw new \Exception("Le mot de passe doit comprendre au moins 5 caractères, dont une majuscule et un chiffre.");
  2956.             }
  2957.             $hashedPassword $this->passwordHasher->hashPassword(
  2958.                 $utilisateur,
  2959.                 $mdp
  2960.             );
  2961.             $utilisateur->setUtlPassword($hashedPassword);
  2962.         }
  2963.         $utilisateur->setUtlPrestataire($request->get('utl_prestataire') ? 0);
  2964.         $manager->persist($utilisateur);
  2965.         if ($idCentreArr != []) {
  2966.             foreach ($utilisateur->getUtilisateurInfos() as $ui) {
  2967.                 $manager->remove($ui);
  2968.             }
  2969.             foreach ($idCentreArr as $fonction) {
  2970.                 if ($fonction != 'none') {
  2971.                     $fonctionRepository $this->em->getRepository(CentreFonction::class);
  2972.                     $currentFonction $fonctionRepository->find(intval($fonction));
  2973.                     $utilisateurInfo = new UtilisateurInfo();
  2974.                     $utilisateurInfo->setUtlInfUtilisateur($utilisateur);
  2975.                     $utilisateurInfo->setUtlInfFonction($currentFonction);
  2976.                     $manager->persist($utilisateurInfo);
  2977.                 }
  2978.             }
  2979.         }
  2980.         $user $this->getUser();
  2981.         $droits $this->accessService->getRightsForUserOnPage($user$this->id);
  2982.         $session->set('droits' $user->getId(), $droits);
  2983.         $manager->flush();
  2984.         $this->cache->delete('utilisateur' $this->id);
  2985.         return $this->redirectToRoute('utilisateur');
  2986.     }
  2987.     /**
  2988.      * @Route("/admin/get_fonctions_by_user/{userId}", name="get_fonctions_by_user")
  2989.      */
  2990.     public function getFonctionsByUser($userId)
  2991.     {
  2992.         $permissionResult $this->checkPermissionAdmin("ecrire""utilisateur");
  2993.         if ($permissionResult instanceof RedirectResponse) {
  2994.             return $permissionResult;
  2995.         }
  2996.         $user $this->em->getRepository(Utilisateur::class)->find($userId);
  2997.         if (!$user) {
  2998.             return new JsonResponse(['error' => 'Utilisateur non trouvé'], 404);
  2999.         }
  3000.         $fonctions = [];
  3001.         foreach ($user->getUtilisateurInfos() as $utilisateurInfo) {
  3002.             $fonction $utilisateurInfo->getUtlInfFonction();
  3003.             $fonctions[] = [
  3004.                 'id' => $fonction->getId(),
  3005.                 'name' => $fonction->getFctnom(),
  3006.             ];
  3007.         }
  3008.         return new JsonResponse($fonctions);
  3009.     }
  3010. // Gestion des Rendez-vous --------------------------------------------------------
  3011.     /**
  3012.      * @Route("/admin/calendrier", name="calendrier")
  3013.      */
  3014.     public function Calendrier(): Response
  3015.     {
  3016.         $allpermission $this->checkAllPermissionAdmin("calendrier");
  3017.         $allpermissionBlocage $this->checkAllPermissionAdmin("blocage");
  3018.         $allpermissionRemboursement $this->checkAllPermissionAdmin("remboursement");
  3019.         $ParametreCentreGroupe $this->em->getRepository(ParametreCentreGroupe::class)->findOneByUrl($_SERVER['SERVER_NAME']);
  3020.         if (!$ParametreCentreGroupe && $_SERVER['APP_ENV'] == 'prod') {
  3021.             return $this->render('public/construction.html.twig', [
  3022.                 'controller_name' => 'AdminController',
  3023.                 'serverName' => $_SERVER['SERVER_NAME']
  3024.             ]);
  3025.         }
  3026.         if (!$allpermission || !$allpermission['lire']) {
  3027.             $this->addFlash('error''Impossible, vous n\'avez pas accés à cette page');
  3028.             return $this->redirectToRoute('admin_erreur');
  3029.         }
  3030.         $data_prestations $this->cache->get('prestation_actif' $this->id, function () {
  3031.             $data_prestations $this->em->getrepository(CentrePrestation::class)->findActifByCentreGroupe($this->id);
  3032.             return $data_prestations;
  3033.         });
  3034.         $data_type_visites $this->cache->get('type_visite' $this->id, function () {
  3035.             $data_type_visites $this->em->getrepository(TypeVisite::class)->findByCentreGroupe($this->id);
  3036.             return $data_type_visites;
  3037.         });
  3038.         $data_type_vehicules $this->cache->get('type_vehicule' $this->id, function () {
  3039.             $data_type_vehicules $this->em->getrepository(TypeVehicule::class)->findByCentreGroupe($this->id);
  3040.             return $data_type_vehicules;
  3041.         });
  3042.         $data_marques $this->cache->get('marque', function () {
  3043.             $data_marques $this->em->getRepository(Marque::class)->findBy([], ['ordre' => 'asc''marque_libele' => 'asc']);
  3044.             return $data_marques;
  3045.         });
  3046.         $data_marques_cl $this->cache->get('marque_cl', function () {
  3047.             $data_marques_cl $this->em->getRepository(MarqueCl::class)->findBy([], ['ordre' => 'asc''marque_libele' => 'asc']);
  3048.             return $data_marques_cl;
  3049.         });
  3050.         $data_energies $this->cache->get('energie', function () {
  3051.             $data_energies $this->em->getrepository(Energie::class)->findAll();
  3052.             return $data_energies;
  3053.         });
  3054.         $data_client_comptes $this->cache->get('client_compte_actif' $this->id, function () {
  3055.             $data_client_comptes $this->em->getrepository(ClientCompte::class)->findByCentreGroupeActif($this->id);
  3056.             return $data_client_comptes;
  3057.         });
  3058.         $data_utilisateurs $this->cache->get('utilisateur' $this->id, function () {
  3059.             $centreFonctions $this->em->getRepository(CentreFonction::class)->findBy(['CentreGroupe' => $this->id]);
  3060.             $utilisateurInfoRepository $this->em->getRepository(UtilisateurInfo::class);
  3061.             $utilisateurs = [];
  3062.             foreach ($centreFonctions as $fonction) {
  3063.                 /** @var UtilisateurInfo $utilisateurInf  */
  3064.                 $utilisateurInf $utilisateurInfoRepository->findBy(['utl_inf_fonction' => $fonction->getId()]);
  3065.                 if (!is_null($utilisateurInf)) {
  3066.                     foreach ($utilisateurInf as $util) {
  3067.                         $utilisateurs[] = $util->getUtlInfUtilisateur();
  3068.                     }
  3069.                 }
  3070.             }
  3071.             $data_utilisateurs = [];
  3072.             foreach ($utilisateurs as $utilisateur) {
  3073.                 if (!in_array($utilisateur$data_utilisateurs) && $utilisateur->getUsername() != 'AbsSuperAdmin') {
  3074.                     $data_utilisateurs[] = $utilisateur;
  3075.                 }
  3076.             }
  3077.             return $data_utilisateurs;
  3078.         });
  3079.         $data_centre_types $this->cache->get('centre_type' $this->id, function () {
  3080.             $data_centre_types $this->em->getRepository(CentreType::class)->findTypesByCentreGroupeId($this->id);
  3081.             return $data_centre_types;
  3082.         });
  3083.         $data_nbr_ligne $this->cache->get('nbr_ligne' $this->id, function () {
  3084.             $data_nbr_ligne $this->em->getRepository(Ligne::class)->findByCentreGroupeActif($this->id);
  3085.             return $data_nbr_ligne;
  3086.         });
  3087. //        $data_partenaires = $this->cache->get('data_partenaires' . $this->id, function () {
  3088.             $data_partenaires $this->em->getRepository(Partenaire::class)->findByCentreGroupeId($this->id);
  3089. //            return $data_partenaires;
  3090. //        });
  3091.         //   $data_centre_groupes = $this->cache->get('centre_groupe' . $this->id, function () {
  3092.         $data_centre_groupes $this->em->getrepository(CentreGroupe::class)->find($this->id);
  3093.         //      return $data_centre_groupes;
  3094.         //  });
  3095.         $data_sms $this->em->getrepository(ParametreCentre::class)->findSmsByCentreGroupe($this->id);
  3096.         $data_param_centre_groupe $this->em->getRepository(ParametreCentreGroupe::class)->findOneBy(['centre_groupe' => $data_centre_groupes->getId()]);
  3097.         $paramCentreVl $this->em->getRepository(ParametreCentre::class)->findSmsAndUserEditByCentreGroupeAndCentreType($this->id1);
  3098.         $paramCentrePl $this->em->getRepository(ParametreCentre::class)->findSmsAndUserEditByCentreGroupeAndCentreType($this->id2);
  3099.         $paramCentreCl $this->em->getRepository(ParametreCentre::class)->findSmsAndUserEditByCentreGroupeAndCentreType($this->id4);
  3100.         $holidaysCentreVl $this->em->getrepository(ParametreCentre::class)->findHolidaysByCentreGroupeAndCentreType($this->id1);
  3101.         $holidaysCentrePl $this->em->getrepository(ParametreCentre::class)->findHolidaysByCentreGroupeAndCentreType($this->id2);
  3102.         $holidaysCentreCl $this->em->getrepository(ParametreCentre::class)->findHolidaysByCentreGroupeAndCentreType($this->id4);
  3103.         $holidaysCentreVlFlat array_reduce($holidaysCentreVl, function ($carry$item) {
  3104.             return array_merge($carry$item['holidays']);
  3105.         }, []);
  3106.         $holidaysCentrePlFlat array_reduce($holidaysCentrePl, function ($carry$item) {
  3107.             return array_merge($carry$item['holidays']);
  3108.         }, []);
  3109.         $holidaysCentreClFlat array_reduce($holidaysCentreCl, function ($carry$item) {
  3110.             return array_merge($carry$item['holidays']);
  3111.         }, []);
  3112.         $year date("Y");
  3113.         $holidaysVl $this->apiController->getFormateHolidays($holidaysCentreVlFlat$year);
  3114.         $holidaysPl $this->apiController->getFormateHolidays($holidaysCentrePlFlat$year);
  3115.         $holidaysCl $this->apiController->getFormateHolidays($holidaysCentreClFlat$year);
  3116.         $energiesCentreVl $this->em->getrepository(ParametreCentre::class)->findEnergiesByCentreGroupeAndCentreType($this->id1);
  3117.         $energiesCentrePl $this->em->getrepository(ParametreCentre::class)->findEnergiesByCentreGroupeAndCentreType($this->id2);
  3118.         $energiesCentreCl $this->em->getrepository(ParametreCentre::class)->findEnergiesByCentreGroupeAndCentreType($this->id4);
  3119.         $cleanEnergiesVl $this->apiController->getCleanEnergies($energiesCentreVl);
  3120.         $cleanEnergiesPl $this->apiController->getCleanEnergies($energiesCentrePl);
  3121.         $cleanEnergiesCl $this->apiController->getCleanEnergies($energiesCentreCl);
  3122.         $horaireMin null;
  3123.         $horaireMax null;
  3124.         if ($data_param_centre_groupe->getPcgHeureDebutCalendar()) {
  3125.             $horaireMin $data_param_centre_groupe->getPcgHeureDebutCalendar()->format('H:i:s');
  3126.         }
  3127.         if ($data_param_centre_groupe->getPcgHeureFinCalendar()) {
  3128.             $horaireMax $data_param_centre_groupe->getPcgHeureFinCalendar()->format('H:i:s');
  3129.         }
  3130.         $ligneHoraireMinMax $this->em->getrepository(LigneHoraire::class)->findMinMaxHorairesByLigne($this->id);
  3131.         if ($horaireMin === null && $ligneHoraireMinMax['horaireMin']) {
  3132.             $horaireMin $ligneHoraireMinMax['horaireMin'];
  3133.         }
  3134.         if ($horaireMax === null && $ligneHoraireMinMax['horaireMax']) {
  3135.             $horaireMax $ligneHoraireMinMax['horaireMax'];
  3136.         }
  3137.         $ligneHoraireMinMax $this->em->getrepository(LigneHoraire::class)->findMinMaxHorairesByLigne($this->id);
  3138.         if ($horaireMin === null && $ligneHoraireMinMax['horaireMin']) {
  3139.             $horaireMin $ligneHoraireMinMax['horaireMin'];
  3140.         }
  3141.         if ($horaireMax === null && $ligneHoraireMinMax['horaireMax']) {
  3142.             $horaireMax $ligneHoraireMinMax['horaireMax'];
  3143.         }
  3144.         $joursOuvertsGlobaux = [];
  3145.         $ligneHoraireData = [];
  3146.         foreach ($data_centre_groupes->getLignes() as $ligne) {
  3147.             $data_jours_ouverts $this->em->getRepository(LigneHoraire::class)->getJoursOuvert($ligne->getId());
  3148.             $joursOuvertsGlobaux array_merge($joursOuvertsGlobaux$data_jours_ouverts);
  3149.             $ligneHoraire $this->em->getrepository(LigneHoraire::class)->findByLigne($ligne->getId());
  3150.             /** @var LigneHoraire $horaire */
  3151.             foreach ($ligneHoraire as $horaire) {
  3152.                 $isMorning true;
  3153.                 if ($horaire->getLgnHorDebut()->format('H:i') >= '12:00') {
  3154.                     $isMorning false;
  3155.                 } else {
  3156.                     
  3157.                 }
  3158.                 $ligneHoraireData[] = [
  3159.                     'idLigne' => $horaire->getLigne()->getId(),
  3160.                     'isOpen' => $horaire->isLgnHorOuvert(),
  3161.                     'dayNumber' => $horaire->getLgnHorListeJours(),
  3162.                     'isMorning' => $isMorning,
  3163.                     'horaireStart' => $horaire->getLgnHorDebut(),
  3164.                     'horaireEnd' => $horaire->getLgnHorFin(),
  3165.                     ];
  3166.             }
  3167.         }
  3168.         // Gestion des jours ouvrables du calendrier en fonction des lignes ouvrables
  3169.         $joursOuvresUniques array_unique($joursOuvertsGlobaux);
  3170.         $tousLesJours range(17);
  3171.         $joursFermesDansTousLesCentres array_diff($tousLesJours$joursOuvresUniques);
  3172.         $joursFermesDansTousLesCentres array_map(function ($jour) {
  3173.             return $jour === $jour;
  3174.         }, $joursFermesDansTousLesCentres);
  3175.         $joursFermesDansTousLesCentres array_values($joursFermesDansTousLesCentres);
  3176.         $data_ligne_centre_types $this->em->getrepository(Ligne::class)->findActiveCentreTypesByCentreGroupe($this->id);
  3177.         $prestations = array();
  3178.         $client_comptes = array();
  3179.         foreach ($data_prestations as $data_prestation) {
  3180.             $prestations[] = [
  3181.                 'id' => $data_prestation->getId(),
  3182.                 'duree' => $data_prestation->getPstDuree(),
  3183.                 'couleur' => $data_prestation->getPstCouleur(),
  3184.                 'centre_type_id' => $data_prestation->getPstTypeVehicule()->getTvCentreType()->getId(),
  3185.                 'centre_type_denomination' => $data_prestation->getPstTypeVehicule()->getTvCentreType()->getCtDenomination(),
  3186.                 'type_vehicule_libele' => $data_prestation->getPstTypeVehicule()->getTvLibelle(),
  3187.                 'type_visite_libele' => $data_prestation->getPstTypeVisite()->getTypVstLibele(),
  3188.                 'type_visite_libele_long' => $data_prestation->getPstTypeVisite()->getTypVstLibeleLong(),
  3189.             ];
  3190.         }
  3191.         foreach ($data_client_comptes as $data_client_compte) {
  3192.             $client_comptes[] = [
  3193.                 'id' => $data_client_compte->getId(),
  3194.                 'nom' => $data_client_compte->getCliNom(),
  3195.                 'prenom' => $data_client_compte->getCliPrenom(),
  3196.                 'societe' => $data_client_compte->getCliNomSociete(),
  3197.                 'isVL' => $data_client_compte->isCliVl(),
  3198.                 'isPL' => $data_client_compte->isCliPl(),
  3199.                 'isCL' => $data_client_compte->isCliCl(),
  3200.             ];
  3201.         }
  3202.         $users_id $this->getUser()->getId();
  3203.         $CentrePartenaire_cteasy $this->em->getRepository(CentrePartenaire::class)->findOneBy(['partenaire' => '1''centre_groupe' => $this->id]);
  3204.         return $this->render('admin/calendrier_view.html.twig', [
  3205.             'slot_duration' => $data_centre_groupes->getCgPasHoraires(),
  3206.             'centre_groupe_name' => $data_centre_groupes->getCgNom(),
  3207.             'horaire_max' => $horaireMax,
  3208.             'horaire_min' => $horaireMin,
  3209.             'nbr_ligne' => count($data_nbr_ligne),
  3210.             'jours_fermes' => json_encode($joursFermesDansTousLesCentres),
  3211.             'nbr_jour_ferme' => count($joursFermesDansTousLesCentres),
  3212.             'prestations' => $prestations,
  3213.             'type_visites' => $data_type_visites,
  3214.             'type_vehicules' => $data_type_vehicules,
  3215.             'marques' => $data_marques,
  3216.             'marquesCl' => $data_marques_cl,
  3217.             'energiesVl' => $cleanEnergiesVl,
  3218.             'energiesPl' => $cleanEnergiesPl,
  3219.             'energiesCl' => $cleanEnergiesCl,
  3220.             'energies' => $data_energies,
  3221.             'client_comptes' => $client_comptes,
  3222.             'utilisateurs' => $data_utilisateurs,
  3223.             'centre_types' => $data_centre_types,
  3224.             'paramCentreVl' => $paramCentreVl,
  3225.             'paramCentrePl' => $paramCentrePl,
  3226.             'paramCentreCl' => $paramCentreCl,
  3227.             'holidaysVl' => $holidaysVl,
  3228.             'holidaysPl' => $holidaysPl,
  3229.             'holidaysCl' => $holidaysCl,
  3230.             'affichage_heure_fin' => $data_param_centre_groupe->isPcgPylBoCartoucheCalClientFirst(),
  3231.             'affichage_client_honore_rdv' => $data_param_centre_groupe->isPcgRdvClientNotHonored(),
  3232.             'bg_color_recurrence' => $data_param_centre_groupe->getPcgRdvRecurrenceBgColor() ? $data_param_centre_groupe->getPcgRdvRecurrenceBgColor() : '#FFCD1C',
  3233.             'bg_color_blocage' => $data_param_centre_groupe->getPcgBlocageBgColor() ? $data_param_centre_groupe->getPcgBlocageBgColor() : '#FF0000',
  3234.             'partenaires' => $data_partenaires,
  3235.             'allpermission' => $allpermission,
  3236.             'allpermissionBlocage' => $allpermissionBlocage,
  3237.             'allpermissionRemboursement' => $allpermissionRemboursement,
  3238.             'ligne_centre_types' => $data_ligne_centre_types,
  3239.             'users_id' => $users_id,
  3240.             'horaireData' => $ligneHoraireData,
  3241.             'creneau_dispo' => $data_param_centre_groupe->isPcgDisplayCreneauDispoBo(),
  3242.             'is_cteasy' => $CentrePartenaire_cteasy true false,
  3243.             'data_sms' => $data_sms,
  3244.         ]);
  3245.     }
  3246.     /**
  3247.      * @Route("/admin/pas-horaires", name="pas-horaires", methods={"POST"})
  3248.      */
  3249.     public function updatePasHoraires(Request $requestObjectManager $manager): Response
  3250.     {
  3251.         $permissionResult $this->checkPermissionAdmin("ecrire""calendrier");
  3252.         if (!$permissionResult) {
  3253.             return new Response('cannot_update_pas_horaire');
  3254.         }
  3255.         $newPasHoraires $request->request->get('cg_pas_horaires');
  3256.         $centreGroupe $this->em->getrepository(CentreGroupe::class)->find($this->id);
  3257.         if (!$centreGroupe) {
  3258.             throw $this->createNotFoundException('Aucun CentreGroupe trouvé avec l\'id ' $this->id);
  3259.         }
  3260.         $centreGroupe->setCgPasHoraires($newPasHoraires);
  3261.         $manager->persist($centreGroupe);
  3262.         $manager->flush();
  3263.         $this->cache->delete('centre_groupe' $this->id);
  3264.         return new JsonResponse($newPasHoraires);
  3265.     }
  3266.     /**
  3267.      * @Route("admin/rendez-vous/json", name="rendez_vous_json")
  3268.      */
  3269.     public function getRendezVousJson(Request $request)
  3270.     {
  3271.         $permissionResult $this->checkPermissionAdmin("lire""calendrier");
  3272.         if ($permissionResult instanceof RedirectResponse) {
  3273.             return $permissionResult;
  3274.         }
  3275.         // Cache du groupe
  3276.         $data_centre_groupes $this->em->getRepository(CentreGroupe::class)->find($this->id);
  3277.         // On pourrait aussi cacher celui-ci ou le joindre, mais c'est une seule requête rapide
  3278.         $parametreCentreGroupe $this->em->getRepository(ParametreCentreGroupe::class)->findOneBy(['centre_groupe' => $data_centre_groupes->getId()]);
  3279.         $start $request->query->get('start');
  3280.         $end $request->query->get('end');
  3281.         $prestationId $request->query->get('prestation');
  3282.         // Requêtes principales (Celles-ci sont bien optimisées avec les joins)
  3283.         $upcomingBlocageByCentreGroupe $this->em->getRepository(LigneBlocage::class)->findUpcomingBlocageByCentreGroupeIdAndDates($this->id$start$end);
  3284.         $upcomingRendezVousByCentreGroupe $this->em->getRepository(Rendezvous::class)->findUpcomingRendezVousByCentreDate($this->id$start$end);
  3285.         // --- DEBUT OPTIMISATION BATCH LOADING ---
  3286.         // 1. Collecte des IDs et Emails pour faire les requêtes en groupe
  3287.         $rdvIds = [];
  3288.         $clientEmails = [];
  3289.         foreach ($upcomingRendezVousByCentreGroupe as $rdv) {
  3290.             $rdvIds[] = $rdv->getId();
  3291.             // Récupération email pour vérification "Client non honoré"
  3292.             $mail null;
  3293.             if ($rdv->getClientLibre()) {
  3294.                 $mail $rdv->getClientLibre()->getClEmail();
  3295.             } elseif ($rdv->getClientCompte()) {
  3296.                 $mail $rdv->getClientCompte()->getCliEmail();
  3297.             }
  3298.             if ($mail) {
  3299.                 $clientEmails[] = $mail;
  3300.             }
  3301.         }
  3302.         $clientEmails array_unique($clientEmails);
  3303.         // 2. Chargement de TOUTES les facturations en UNE SEULE requête
  3304.         $facturationsMap = [];
  3305.         if (!empty($rdvIds)) {
  3306.             $facturations $this->em->getRepository(RendezVousFacturation::class)
  3307.                 ->createQueryBuilder('f')
  3308.                 ->where('f.rendezvous IN (:ids)')
  3309.                 ->setParameter('ids'$rdvIds)
  3310.                 ->getQuery()
  3311.                 ->getResult();
  3312.             // On indexe par ID de RDV pour retrouver instantanément dans la boucle
  3313.             foreach ($facturations as $factu) {
  3314.                 $facturationsMap[$factu->getRendezvous()->getId()] = $factu;
  3315.             }
  3316.         }
  3317.         // 3. Chargement des "Mauvais payeurs" en UNE SEULE requête
  3318.         $badPayerMap = [];
  3319.         if (!empty($clientEmails) && $parametreCentreGroupe->isPcgRdvClientNotHonored()) {
  3320.             $badPayersList $this->em->getRepository(Rendezvous::class)->findBadPayersByEmails($this->id$clientEmails);
  3321.             // On transforme en map [email => true] pour vérification rapide
  3322.             $badPayerMap array_flip($badPayersList);
  3323.         }
  3324.         // --- FIN OPTIMISATION BATCH LOADING ---
  3325.         $events = [];
  3326.         // Gestion des créneaux dispos (inchangée)
  3327.         $testPrestation $this->em->getRepository(CentrePrestation::class)->findPrestationExistsByCentreGroupe($prestationId$this->id);
  3328.         if (!empty($prestationId) && $prestationId !== 'null' && $parametreCentreGroupe->isPcgDisplayCreneauDispoBo() && $testPrestation) {
  3329.             $startString str_replace(' ''+'$start);
  3330.             $endString str_replace(' ''+'$end);
  3331.             $contents $this->creneauxDispo($startString$endString$prestationId);
  3332.             $events array_merge($eventsarray_filter($contents));
  3333.         }
  3334.         // BOUCLE PRINCIPALE (Désormais purement PHP, sans SQL interne)
  3335.         foreach ($upcomingRendezVousByCentreGroupe as $rendezVous) {
  3336.             $rendezVousId $rendezVous->getId();
  3337.             $ligneId $rendezVous->getLigne()->getId(); // Grâce au join dans le repository, ceci ne déclenche pas de requête
  3338.             $clientHonorePasRdv false;
  3339.             // Initialisation vars
  3340.             $nom ''$telephone ''$email '';
  3341.             $clientLibreId ''$clientCompteId '';
  3342.             if ($rendezVous->getClientLibre()) {
  3343.                 $cl $rendezVous->getClientLibre();
  3344.                 $nom $cl->getClNom();
  3345.                 $telephone $cl->getClTelephone();
  3346.                 $email $cl->getClEmail();
  3347.                 $clientLibreId $cl->getId();
  3348.                 // OPTIMISATION : Vérification dans la Map au lieu de faire une requête SQL
  3349.                 if ($email && isset($badPayerMap[$email])) {
  3350.                     $clientHonorePasRdv true;
  3351.                 }
  3352.             } else if ($rendezVous->getClientCompte()) {
  3353.                 $cc $rendezVous->getClientCompte();
  3354.                 $nom $cc->getCliNomSociete();
  3355.                 $telephone $cc->getCliTelephone();
  3356.                 $email $cc->getCliEmail();
  3357.                 $clientCompteId $cc->getId();
  3358.                 // Si la logique s'applique aussi aux clients compte
  3359.                 if ($email && isset($badPayerMap[$email])) {
  3360.                     $clientHonorePasRdv true;
  3361.                 }
  3362.             }
  3363.             $partenaireColor $rendezVous->getPartenaire() ? $rendezVous->getPartenaire()->getPaCouleur() : '';
  3364.             $commentaire $rendezVous->getRdvcommentaire() ?? '';
  3365.             $tarifTotal $rendezVous->getRdvTarif();
  3366.             // Logique d'affichage (VTP / Multi)
  3367.             $rdvInfos $rendezVous->getRendezVousInfos();
  3368.             // Initialisation des tableaux
  3369.             $title = [];
  3370.             $prestationIdArr = []; $centreTypeArr = []; $vehiculeIdArr = [];
  3371.             $vehiculeNomArr = []; $vehiculeClientIdArr = []; $typeVehiculeIdArr = [];
  3372.             $energieIdArr = []; $immatriculationPlArr = []; $rendezVousInfosResultColorArr = [];
  3373.             $recurrenceIdArr = []; $tarifPrestaArr = [];
  3374.             $backgroundColor '';
  3375.             $heureDebut ''$heureFin '';
  3376.             $depot false$convoyage false$pret false;
  3377.             if (count($rdvInfos) > && $rdvInfos[0] !== null) {
  3378.                 // Initialisation de la chaine de titre pour l'index 0
  3379.                 $title[0] = $nom ' / ';
  3380.                 foreach ($rdvInfos as $rendezVousInfo) {
  3381.                     // Grâce aux joins dans le repo, tout ceci est déjà en mémoire
  3382.                     $rendesVousVehicule $rendezVousInfo->getVehicule();
  3383.                     $currentImmat $rendesVousVehicule->getRdvVhcImmatriculation() ? $rendesVousVehicule->getRdvVhcImmatriculation() : '';
  3384.                     $marqueLib = ($rendesVousVehicule->getMarque() ? $rendesVousVehicule->getMarque()->getMarquelibele() : '') . ($rendesVousVehicule->getMarqueCl() ? $rendesVousVehicule->getMarqueCl()->getMarquelibele() : '');
  3385.                     $modeleLib = ($rendesVousVehicule->getModele() ? $rendesVousVehicule->getModele()->getMdllibele() : '') . ($rendesVousVehicule->getModeleCl() ? $rendesVousVehicule->getModeleCl()->getMdllibele() : '');
  3386.                     $currentPresta $rendezVousInfo->getCentrePrestation()->getPstTypeVisite()->getTypvstlibele();
  3387.                     if ($currentImmat !== '') {
  3388.                         $currentImmat $currentImmat ' / ';
  3389.                     }
  3390.                     // Concaténation du titre
  3391.                     $title[0] .= $currentImmat $marqueLib ' - ' $modeleLib ' / ' $currentPresta ' / ' $tarifTotal '€';
  3392.                     $prestationIdArr[] = $rendezVousInfo->getCentrePrestation()->getId();
  3393.                     if (!$backgroundColor) {
  3394.                         $backgroundColor '#' $rendezVousInfo->getCentrePrestation()->getPstCouleur();
  3395.                     }
  3396.                     $centreTypeArr[] = $rendezVousInfo->getCentrePrestation()->getPstTypeVisite()->getTypVstLibele();
  3397.                     $vehiculeIdArr[] = $rendesVousVehicule->getId();
  3398.                     $vehiculeClientIdArr[] = $rendesVousVehicule->getClientCompte() ? $rendesVousVehicule->getClientCompte()->getId() : '';
  3399.                     $vehiculeNomArr[] =
  3400.                         ($rendesVousVehicule->getRdvVhcImmatriculation() ? $rendesVousVehicule->getRdvVhcImmatriculation() . ' - ' '') .
  3401.                         $marqueLib ' - ' $modeleLib;
  3402.                     $typeVehiculeIdArr[] = $rendesVousVehicule->getTypeVehicule() ? $rendesVousVehicule->getTypeVehicule()->getId() : '';
  3403.                     $energieIdArr[] = $rendesVousVehicule->getEnergie() ? $rendesVousVehicule->getEnergie()->getId() : '';
  3404.                     $immatriculationPlArr[] = $rendesVousVehicule->getRdvVhcImmatriculation() ? $rendesVousVehicule->getRdvVhcImmatriculation() : '';
  3405.                     $rendezVousInfosResultColorArr[] = $rendezVousInfo->getRdvInfResultat() ? $rendezVousInfo->getRdvInfResultat() : '';
  3406.                     $recurrenceIdArr[] = '';
  3407.                     $tarifPrestaArr[] = $rendezVousInfo->getCentrePrestation()->getPsttarif();
  3408.                     // Écrase les valeurs précédentes (logique conservée)
  3409.                     $heureDebut $rendezVousInfo->getRdvInfHdebutCt();
  3410.                     $heureFin $rendezVousInfo->getRdvInfHfinCt();
  3411.                     $depot $rendezVousInfo->isRdvInfDepot();
  3412.                     $convoyage $rendezVousInfo->isRdvInfConvoyage();
  3413.                     $pret $rendezVousInfo->isRdvInfPret();
  3414.                 }
  3415.             } else {
  3416.                 $title $nom;
  3417.                 $prestationIdArr '';
  3418.                 $backgroundColor $rendezVous->getRdvColor() ?? $parametreCentreGroupe->getPcgRdvRecurrenceBgColor() ?? '#FFCD1C';
  3419.                 $centreTypeArr '';
  3420.                 $vehiculeIdArr '';
  3421.                 $vehiculeClientIdArr '';
  3422.                 $vehiculeNomArr '';
  3423.                 $typeVehiculeIdArr '';
  3424.                 $energieIdArr '';
  3425.                 $immatriculationPlArr '';
  3426.                 $rendezVousInfosResultColorArr '';
  3427.                 $recurrenceIdArr $rendezVous->getRecurrence()?$rendezVous->getRecurrence()->getId():'';
  3428.                 $tarifPrestaArr '';
  3429.                 $tarifTotal '';
  3430.             }
  3431.             // Override couleur
  3432.             if ($rendezVous->isRdvTermine() == 1$backgroundColor '#8b8b8b';
  3433.             if ($rendezVous->getRdvDatetimeTimeout() != null$backgroundColor '#7a7a7a';
  3434.             // --- OPTIMISATION : RECUPERATION FACTURATION DEPUIS LA MAP ---
  3435.             // On remplace la requête findOneBy par un accès tableau immédiat
  3436.             $rendezVousFacturationData = [];
  3437.             if (isset($facturationsMap[$rendezVousId])) {
  3438.                 $f $facturationsMap[$rendezVousId];
  3439.                 $rendezVousFacturationData[] = [
  3440.                     'optModeReglement' => $f->getFpModeReglement(),
  3441.                     'montantPresta' => $f->getFpMontantPrestation(),
  3442.                     'montantFraisService' => $f->getFpMontantFraisService(),
  3443.                     'optCv' => $f->isFpOptionCv(),
  3444.                     'optCvMontant' => $f->getFpOptionCvMontant(),
  3445.                     'optModif' => $f->isFpOptionModifiable(),
  3446.                     'optModifMontant' => $f->getFpOptionModifiableMontant(),
  3447.                     'optPaiementMulti' => $f->isFpOptionPaiementMultiple(),
  3448.                     'optPaiementMultiMontant' => $f->getFpOptionPaiementMultipleMontant(),
  3449.                     'secondVersementDate' => $f->getFpDateSecondVersement(),
  3450.                     'secondVersementMontant' => $f->getFpMontantSecondVersement(),
  3451.                     'optCoupon' => $f->isFpOptionCouponReduction(),
  3452.                     'optCouponMontant' => $f->getFpOptionCouponReductionMontant(),
  3453.                 ];
  3454.             }
  3455.             $events[] = [
  3456.                 'id' => $rendezVous->getId(),
  3457.                 'resourceId' => $ligneId,
  3458.                 'title' => $title,
  3459.                 'start' => $rendezVous->getRdvDateHeure()->format('Y-m-d H:i:s'),
  3460.                 'end' => (clone $rendezVous->getRdvDateHeure())->modify(sprintf('+%d minutes'$rendezVous->getRdvDuree()))->format('Y-m-d H:i:s'),
  3461.                 'backgroundColor' => $backgroundColor,
  3462.                 'extendedProps' => [
  3463.                     'nom' => $nom,
  3464.                     'telephone' => $telephone,
  3465.                     'email' => $email,
  3466.                     'duree' => $rendezVous->getRdvDuree(),
  3467.                     'commentaire' => $commentaire,
  3468.                     'depot' => $depot,
  3469.                     'convoyage' => $convoyage,
  3470.                     'pret' => $pret,
  3471.                     'rappelSms' => $rendezVous->isRdvDemandeRappelSms(),
  3472.                     'rappelConfirm' => $rendezVous->isRdvDemandeRappelSms(),
  3473.                     'centreType' => $centreTypeArr,
  3474.                     'centreTypeId' => $rendezVous->getCentreType()->getId(),
  3475.                     'prestationId' => $prestationIdArr,
  3476.                     'clientLibreId' => $clientLibreId,
  3477.                     'clientCompteId' => $clientCompteId,
  3478.                     'typeVehiculeId' => $typeVehiculeIdArr,
  3479.                     'energie' => $energieIdArr,
  3480.                     'utilisateurId' => $rendezVous->getUtilisateur() ? $rendezVous->getUtilisateur()->getId() : '',
  3481.                     'vehiculeId' => $vehiculeIdArr,
  3482.                     'vehiculeClientId' => $vehiculeClientIdArr,
  3483.                     'vehiculeNom' => $vehiculeNomArr,
  3484.                     'rendezVousId' => $rendezVousId,
  3485.                     'blocageId' => '',
  3486.                     'recurrenceId' => $recurrenceIdArr,
  3487.                     'ligneId' => $ligneId,
  3488.                     'immatriculationPl' => $immatriculationPlArr,
  3489.                     'partenaireColor' => $partenaireColor,
  3490.                     'rendezVousInfosResultColor' => $rendezVousInfosResultColorArr,
  3491.                     'tarifPresta' => $tarifPrestaArr,
  3492.                     'tarifTotal' => $tarifTotal,
  3493.                     'heureDebut' => ($heureDebut instanceof \DateTimeInterface) ? $heureDebut->format('H:i') : $heureDebut,
  3494.                     'heureFin' => ($heureFin instanceof \DateTimeInterface) ? $heureFin->format('H:i') : $heureFin,
  3495.                     'vehiculePresent' => $rendezVous->isRdvVehiculePresent(),
  3496.                     'tokenPayline' => $rendezVous->getTokenPayline(),
  3497.                     'rendezVousFacturation' => $rendezVousFacturationData,
  3498.                     'dateCreation' => $rendezVous->getRdvDateCreation()->format('d/m/Y H:i'),
  3499.                     'CouponCteasy' => $rendezVous->getRdvCouponCteasy(),
  3500.                     'BonCommande' => $rendezVous->getRdvBonCommande(),
  3501.                     'isInfoBulle' => $parametreCentreGroupe->isPcgInfoBulle(),
  3502.                     'clientHonorePasRdv' => $clientHonorePasRdv,
  3503.                 ],
  3504.             ];
  3505.         }
  3506.         // Traitement des blocages (Déjà OK)
  3507.         foreach ($upcomingBlocageByCentreGroupe as $blocage) {
  3508.             $events[] = array(
  3509.                 'resourceId' => $blocage->getLigne()->getId(),
  3510.                 'title' => 'Blocage',
  3511.                 'start' => $blocage->getBlcDebut()->format('Y-m-d H:i:s'),
  3512.                 'end' => $blocage->getBlcFin()->format('Y-m-d H:i:s'),
  3513.                 'backgroundColor' => $blocage->getBlcBgColor() ?? $parametreCentreGroupe->getPcgBlocageBgColor() ?? '#FF0000',
  3514.                 'extendedProps' => [
  3515.                     'commentaire' => $blocage->getBlcCommentaire(),
  3516.                     'blocageId' => $blocage->getId(),
  3517.                     'recurrenceId' => $blocage->getRecurrence() ? $blocage->getRecurrence()->getId() : '',
  3518.                     'ligneId' => $blocage->getLigne()->getId(),
  3519.                     'isInfoBulle' => $parametreCentreGroupe->isPcgInfoBulle()
  3520.                 ],
  3521.             );
  3522.         }
  3523.         return new JsonResponse($events);
  3524.     }
  3525.     /**
  3526.      * @Route("admin/promotion/json", name="promotion_json")
  3527.      */
  3528.     public function getPromotionsJson(Request $request)
  3529.     {
  3530.         $permissionResult $this->checkPermissionAdmin("lire""calendrier");
  3531.         if ($permissionResult instanceof RedirectResponse) {
  3532.             return $permissionResult;
  3533.         }
  3534.         $start $request->query->get('start');
  3535.         $end $request->query->get('end');
  3536.         $promotionCreneaux $this->em->getrepository(PromotionCreneau::class)->findByCentreGroupeAndDates($this->id$start$end);
  3537.         // $upcomingRendezVous = $this->em->getrepository(Rendezvous::class)->findUpcomingRendezVousByCentre($this->id);
  3538.         $events = [];
  3539.         foreach ($promotionCreneaux as $promotionCreneau) {
  3540.             $events[] = [
  3541.                 'id' => $promotionCreneau->getId(),
  3542.                 'title' => $promotionCreneau->getPromotion()->getPrmNom(),
  3543.                 'start' => $promotionCreneau->getPrmCreDebut()->format('Y-m-d H:i:s'),
  3544.                 'end' => $promotionCreneau->getPrmCreFin()->format('Y-m-d H:i:s'),
  3545.                 'extendedProps' => [
  3546.                     'promotionId' => $promotionCreneau->getPromotion()->getId(),
  3547.                     'creneauId' => $promotionCreneau->getId(),
  3548.                     'recurrenceId' => $promotionCreneau->getRecurrence() ? $promotionCreneau->getRecurrence()->getId() : '',
  3549.                     'prm_cre_dyn1' => $promotionCreneau->getPrmCreDyn1(),
  3550.                     'prm_cre_dyn2' => $promotionCreneau->getPrmCreDyn2(),
  3551.                     'prm_cre_dyn3' => $promotionCreneau->getPrmCreDyn3(),
  3552.                     'prm_cre_prix_dyn1' => $promotionCreneau->getPrmCrePrixDyn1(),
  3553.                     'prm_cre_prix_dyn2' => $promotionCreneau->getPrmCrePrixDyn2(),
  3554.                     'prm_cre_prix_dyn3' => $promotionCreneau->getPrmCrePrixDyn3(),
  3555.                 ],
  3556.             ];
  3557.         }
  3558.         return new JsonResponse($events);
  3559.     }
  3560.     /**
  3561.      * @Route("admin/rdv_termine_update", name="rdv_termine_update")
  3562.      */
  3563.     public function UpdateRdvTermine(Request $requestObjectManager $manager)
  3564.     {
  3565.         $permissionResult $this->checkPermissionAdmin("ecrire""calendrier");
  3566.         if ($permissionResult instanceof RedirectResponse) {
  3567.             return $permissionResult;
  3568.         }
  3569.         $rendezvous $this->em->getrepository(Rendezvous::class)->find($request->get('rendezvous_id'));
  3570.         if ($rendezvous->isRdvTermine() == 1) {
  3571.             $rendezvous->setRdvTermine(0);
  3572.         } else {
  3573.             $rendezvous->setRdvTermine(1);
  3574.         }
  3575.         $manager->persist($rendezvous);
  3576.         $manager->flush();
  3577.         return new Response('ok');
  3578.     }
  3579.     /**
  3580.      * @Route("admin/rdv_vhc_present_update", name="rdv_vhc_present_update")
  3581.      */
  3582.     public function UpdateRdvVhcPresent(Request $requestObjectManager $manager)
  3583.     {
  3584.         $permissionResult $this->checkPermissionAdmin("ecrire""calendrier");
  3585.         if ($permissionResult instanceof RedirectResponse) {
  3586.             return $permissionResult;
  3587.         }
  3588.         $rendezvous $this->em->getrepository(Rendezvous::class)->find($request->get('rendezvous_id'));
  3589.         if ($rendezvous->isRdvVehiculePresent() == 1) {
  3590.             $rendezvous->setRdvVehiculePresent(0);
  3591.         } else {
  3592.             $rendezvous->setRdvVehiculePresent(1);
  3593.         }
  3594.         $manager->persist($rendezvous);
  3595.         $manager->flush();
  3596.         return new Response('ok');
  3597.     }
  3598.     /**
  3599.      * @Route("admin/ligne_centre/json", name="admin_ligne_centre_json")
  3600.      */
  3601.     public function getLigneCentreJson()
  3602.     {
  3603.         $permissionResult $this->checkPermissionAdmin("lire""calendrier");
  3604.         if ($permissionResult instanceof RedirectResponse) {
  3605.             return $permissionResult;
  3606.         }
  3607.         $data_ligne_centre $this->em->getrepository(Ligne::class)->findByCentreGroupeActif($this->id);
  3608.         $events = [];
  3609.         foreach ($data_ligne_centre as $ligne) {
  3610.             $data_ligne_horaire $this->em->getrepository(LigneHoraire::class)->findBy(['ligne' => $ligne->getId()]);
  3611.             $businessHours = array();
  3612.             foreach ($data_ligne_horaire as $ligne_horaire) {
  3613.                 if ($ligne_horaire->getLgnHorListeJours() == 7) {
  3614.                     $jours 0;
  3615.                 } else {
  3616.                     $jours $ligne_horaire->getLgnHorListeJours();
  3617.                 }
  3618.                 $startTime $ligne_horaire->getLgnHorDebut()->format('H:i');
  3619.                 $endTime $ligne_horaire->getLgnHorFin()->format('H:i');
  3620.                 $businessHours[] = [
  3621.                     'daysOfWeek' => '[' $jours ']',
  3622.                     //'startTime' => $ligne_horaire->isLgnHorOuvert() ? $ligne_horaire->getLgnHorDebut()->format('H:i') : '00:00',
  3623.                     //'endTime' => $ligne_horaire->isLgnHorOuvert() ? $ligne_horaire->getLgnHorFin()->format('H:i'): '00:00',
  3624.                     'startTime' => $startTime,
  3625.                     'endTime' => $endTime,
  3626.                 ];
  3627.             };
  3628.             $events[] = [
  3629.                 'id' => $ligne->getId(),
  3630.                 'title' => $ligne->getlgnnom(),
  3631.                 //'type' => $ligne->getCentreType()->getId(),
  3632.                 'businessHours' => $businessHours,
  3633.                 'extendedProps' => [
  3634.                     'typeVl' => $ligne->isLgnVl(),
  3635.                     'typePl' => $ligne->isLgnPl(),
  3636.                     'typeCl' => $ligne->isLgnCl(),
  3637.                     'color' => $ligne->getColor(),
  3638.                 ],
  3639.             ];
  3640.         }
  3641.         return new JsonResponse($events);
  3642.     }
  3643.     /**
  3644.      * @Route("admin/modeles/{id_centre_type}/{id_marque}", name="modeles_by_marque", methods={"GET"})
  3645.      */
  3646.     public function getModelesByMarque(int $id_centre_typeint $id_marque): JsonResponse
  3647.     {
  3648.         if ($id_centre_type == 1) {
  3649.             $modeles $this->em->getrepository(Modele::class)->findBy(['code_marque' => $id_marque], ['mdl_ordre' => 'asc''mdl_libele' => 'asc']);
  3650.         } elseif ($id_centre_type == 4) {
  3651.             $modeles $this->em->getrepository(ModeleCl::class)->findBy(['code_marque_cl' => $id_marque], ['mdl_ordre' => 'asc''mdl_libele' => 'asc']);
  3652.         }
  3653.         $modelesArray = [];
  3654.         foreach ($modeles as $modele) {
  3655.             $modelesArray[] = [
  3656.                 'id' => $modele->getId(),
  3657.                 'libele' => $modele->getMdlLibele(),
  3658.             ];
  3659.         }
  3660.         return new JsonResponse($modelesArray);
  3661.     }
  3662.     /**
  3663.      * @Route("admin/prestation/{id_centre_type}", name="prestation_by_centre_type", methods={"GET"})
  3664.      */
  3665.     public function getPrestationByCentreType(int $id_centre_type)
  3666.     {
  3667.         $permissionResult $this->checkPermissionAdmin("lire""calendrier");
  3668.         if ($permissionResult instanceof RedirectResponse) {
  3669.             return $permissionResult;
  3670.         }
  3671.         $data_prestations $this->em->getRepository(CentrePrestation::class)->findActifByCentreGroupeAndCentreType($this->id$id_centre_type);
  3672.         $prestationsArray $this->formatPrestations($data_prestations);
  3673.         return new JsonResponse($prestationsArray);
  3674.     }
  3675.     /**
  3676.      * @Route("admin/prestation_by_type_vehicule/{id_type_vehicule}", name="prestation_by_type_vehicule", methods={"GET"})
  3677.      */
  3678.     public function prestationByTypeVehicule(int $id_type_vehicule)
  3679.     {
  3680.         $permissionResult $this->checkPermissionAdmin("lire""calendrier");
  3681.         if ($permissionResult instanceof RedirectResponse) {
  3682.             return $permissionResult;
  3683.         }
  3684.         $data_prestations $this->em->getRepository(CentrePrestation::class)->findAllByCentreGroupeAndTypeVehicule($this->id$id_type_vehicule);
  3685.         $prestationsArray $this->formatPrestations($data_prestations);
  3686.         return new JsonResponse($prestationsArray);
  3687.     }
  3688.     private function formatPrestations(array $prestations)
  3689.     {
  3690.         $prestationsArray = [];
  3691.         foreach ($prestations as $prestation) {
  3692.             $prestationsArray[] = [
  3693.                 'id' => $prestation->getId(),
  3694.                 'pst_tarif' => $prestation->getPstTarif(),
  3695.                 'pst_duree' => $prestation->getPstDuree(),
  3696.                 'type_visite' => $prestation->getPstTypeVisite()->getId(),
  3697.                 'type_visite_libele' => $prestation->getPstTypeVisite()->getTypVstLibele(),
  3698.                 'type_visite_libele_court' => $prestation->getPstTypeVisite()->getTypVstLibeleCourt(),
  3699.                 'type_visite_libele_long' => $prestation->getPstTypeVisite()->getTypVstLibeleLong(),
  3700.                 'type_vehicule_libele' => $prestation->getPstTypeVehicule()->getTvLibelle(),
  3701.             ];
  3702.         }
  3703.         return $prestationsArray;
  3704.     }
  3705.     /**
  3706.      * @Route("admin/get-client-compte/{id}", name="get_client_compte")
  3707.      */
  3708.     public function getClientCompteInfo(ClientCompte $clientCompte)
  3709.     {
  3710.         $permissionResult $this->checkPermissionAdmin("lire""calendrier");
  3711.         if ($permissionResult instanceof RedirectResponse) {
  3712.             return $permissionResult;
  3713.         }
  3714.         if (!$clientCompte) {
  3715.             $this->addFlash('error'"Client compte non trouvé.");
  3716.             return $this->redirectToRoute('calendrier');
  3717.         }
  3718.         if ($clientCompte->getCentreGroupe()->getId() !== $this->id) {
  3719.             $this->addFlash('error'"Impossible de récuperer ce client compte car il n'est pas liée à votre centre.");
  3720.             return $this->redirectToRoute('calendrier');
  3721.         }
  3722.         $clientCompteArray = [
  3723.             'nom' => $clientCompte->getCliNom(),
  3724.             'prenom' => $clientCompte->getCliPrenom(),
  3725.             'telephone' => $clientCompte->getCliTelephone(),
  3726.             'email' => $clientCompte->getCliEmail(),
  3727.         ];
  3728.         return new JsonResponse($clientCompteArray);
  3729.     }
  3730.     /**
  3731.      * @Route("admin/get-client-libre/{id}", name="get_client_libre")
  3732.      */
  3733.     public function getClientLibreInfo(ClientLibre $clientLibre)
  3734.     {
  3735.         $permissionResult $this->checkPermissionAdmin("lire""calendrier");
  3736.         if ($permissionResult instanceof RedirectResponse) {
  3737.             return $permissionResult;
  3738.         }
  3739.         if (!$clientLibre) {
  3740.             $this->addFlash('error'"Client libre non trouvé.");
  3741.             return $this->redirectToRoute('calendrier');
  3742.         }
  3743.         $isLinked $this->em->getRepository(ClientLibre::class)->isClientLibreLinkedToCentreGroupe($clientLibre$this->id);
  3744.         if (!$isLinked) {
  3745.             $this->addFlash('error'"Client libre n'est pas associé à ce centre groupe.");
  3746.             return $this->redirectToRoute('calendrier');
  3747.         }
  3748.         $clientLibreArray = [
  3749.             'nom' => $clientLibre->getClNom(),
  3750.             'prenom' => $clientLibre->getClPrenom(),
  3751.             'telephone' => $clientLibre->getClTelephone(),
  3752.             'email' => $clientLibre->getClEmail(),
  3753.             'civilite' => $clientLibre->getClCivilite(),
  3754.         ];
  3755.         return new JsonResponse($clientLibreArray);
  3756.     }
  3757.     /**
  3758.      * @Route("admin/get-vehicules/{clientCompteId}/{centreType}", name="get_vehicules_by_client", methods={"GET"})
  3759.      */
  3760.     public function getVehiculesByClient(int $clientCompteIdint $centreTypeRendezVousVehiculeRepository $rdvVehiculeRepo)
  3761.     {
  3762.         $permissionResult $this->checkPermissionAdmin("lire""calendrier");
  3763.         if ($permissionResult instanceof RedirectResponse) {
  3764.             return $permissionResult;
  3765.         }
  3766.         if (!$clientCompteId) {
  3767.             $this->addFlash('error'"Client id non communiqué.");
  3768.             return $this->redirectToRoute('calendrier');
  3769.         }
  3770.         if (!$centreType) {
  3771.             $this->addFlash('error'"Centre type non communiqué.");
  3772.             return $this->redirectToRoute('calendrier');
  3773.         }
  3774.         $clientCompte $this->em->getRepository(ClientCompte::class)->find($clientCompteId);
  3775.         if ($clientCompte->getCentreGroupe()->getId() !== $this->id) {
  3776.             $this->addFlash('error'"Impossible de récuperer ce client compte car il n'est pas liée à votre centre.");
  3777.             return $this->redirectToRoute('calendrier');
  3778.         }
  3779.         $vehicules $rdvVehiculeRepo->findByClientAndTypeCentre($clientCompte$centreType);
  3780.         $vehiculeArray = [];
  3781.         $marque '';
  3782.         $modele '';
  3783.         foreach ($vehicules as $vehicule) {
  3784.             if ($centreType == || $centreType == 2) {
  3785.                 $marque $vehicule->getMarque() ? $vehicule->getMarque()->getMarqueLibele() : '';
  3786.                 $modele $vehicule->getModele() ? $vehicule->getModele()->getMdlLibele() : '';
  3787.             } else if ($centreType == 4) {
  3788.                 $marque $vehicule->getMarqueCl() ? $vehicule->getMarqueCl()->getMarqueLibele() : '';
  3789.                 $modele $vehicule->getModeleCl() ? $vehicule->getModeleCl()->getMdlLibele() : '';
  3790.             }
  3791.             $vehiculeArray[] = [
  3792.                 'id' => $vehicule->getId(),
  3793.                 'marque' => $marque,
  3794.                 'modele' => $modele,
  3795.                 'immatriculation' => $vehicule->getRdvVhcImmatriculation(),
  3796.                 'libelle_pl' => $vehicule->getTypeVehicule()->getTvLibelle(),
  3797.                 'id_type_vehicule' => $vehicule->getTypeVehicule()->getId(),
  3798.             ];
  3799.         }
  3800.         return new JsonResponse($vehiculeArray);
  3801.     }
  3802.     /**
  3803.      * @Route("/admin/get-vehicule/{vehiculeId}", name="get_vehicule", methods={"GET"})
  3804.      */
  3805.     public function getVehiculeAction($vehiculeId)
  3806.     {
  3807.         $permissionResult $this->checkPermissionAdmin("lire""calendrier");
  3808.         if ($permissionResult instanceof RedirectResponse) {
  3809.             return $permissionResult;
  3810.         }
  3811.         $vehicule $this->em->getRepository(RendezVousVehicule::class)->find($vehiculeId);
  3812.         $isLinked $this->em->getRepository(RendezVousInfos::class)->findCentreGroupeByRendezVousVehicule($vehicule$this->id);
  3813.         if (!$isLinked) {
  3814.             $this->addFlash('error'"Rendez vous véhicule n'est pas associé à ce centre groupe.");
  3815.             return $this->redirectToRoute('calendrier');
  3816.         }
  3817.         $response = new JsonResponse([
  3818.             'vehicule_id' => $vehicule->getId(),
  3819.             'nom_proprietaire' => $vehicule->getRdvVhcNomClientProprietaire(),
  3820.             'prenom_proprietaire' => $vehicule->getRdvVhcPrenomClientProprietaire(),
  3821.             'marque_id' => $vehicule->getMarque() ? $vehicule->getMarque()->getId() : ($vehicule->getMarqueCl() ? $vehicule->getMarqueCl()->getId() : 1),
  3822.             'modele_id' => $vehicule->getModele() ? $vehicule->getModele()->getId() : ($vehicule->getModeleCl() ? $vehicule->getModeleCl()->getId() : 1),
  3823.             'energie_id' => $vehicule->getEnergie() ? $vehicule->getEnergie()->getId() : '',
  3824.             'immatriculation' => $vehicule->getRdvVhcImmatriculation(),
  3825.             'type_vehicule' => $vehicule->getTypeVehicule() ? $vehicule->getTypeVehicule()->getId() : null,
  3826.             'nom' => $vehicule->getRdvVhcNomClientProprietaire(),
  3827.             'prenom' => $vehicule->getRdvVhcPrenomClientProprietaire(),
  3828.             'reference_parc' => $vehicule->getRdvVhcRefParc(),
  3829.             'numero_de_serie' => $vehicule->getRdvVhcNumSerie(),
  3830.             'description' => $vehicule->getRdvVhcDescription(),
  3831.             'date_echeance' => $vehicule->getRdvVhcDateEcheance() ? $vehicule->getRdvVhcDateEcheance()->format('Y-m-d') : null,
  3832.             'date_chrono' => $vehicule->getRdvVhcDateChronotachygraphe() ? $vehicule->getRdvVhcDateChronotachygraphe()->format('Y-m-d') : null,
  3833.             'date_limiteur' => $vehicule->getRdvVhcDateLimiteurVitesse() ? $vehicule->getRdvVhcDateLimiteurVitesse()->format('Y-m-d') : null,
  3834.             'type_proprietaire' => $vehicule->getRdvVhcTypeProprietaire(),
  3835.             'zone_de_saisie_1' => $vehicule->getRdvVhcZoneSaisie1(),
  3836.             'date_de_saisie_1' => $vehicule->getRdvVhcDateSaisie1() ? $vehicule->getRdvVhcDateSaisie1()->format('Y-m-d') : null,
  3837.             'zone_de_saisie_2' => $vehicule->getRdvVhcZoneSaisie2(),
  3838.             'date_de_saisie_2' => $vehicule->getRdvVhcDateSaisie2() ? $vehicule->getRdvVhcDateSaisie2()->format('Y-m-d') : null,
  3839.             'zone_de_saisie_3' => $vehicule->getRdvVhcZoneSaisie3(),
  3840.             'date_de_saisie_3' => $vehicule->getRdvVhcDateSaisie3() ? $vehicule->getRdvVhcDateSaisie3()->format('Y-m-d') : null,
  3841.         ]);
  3842.         return $response;
  3843.     }
  3844.     /**
  3845.      * @Route("admin/rendez_vous_vehicule_add", name="rendez_vous_vehicule_add")
  3846.      */
  3847.     public function AddRendezVousVehicule(Request $requestObjectManager $manager)
  3848.     {
  3849.         $permissionResult $this->checkPermissionAdmin("ecrire""calendrier");
  3850.         if ($permissionResult instanceof RedirectResponse) {
  3851.             return $permissionResult;
  3852.         }
  3853.         if ($request->get('id_vehicule_add')) {
  3854.             $rendez_vous_vehicules $this->em->getrepository(RendezVousVehicule::class)->find($request->get('id_vehicule_add'));
  3855.         } else {
  3856.             $rendez_vous_vehicules = new RendezVousVehicule();
  3857.         }
  3858.         // differencie si le vehicule est un VL ou un CL
  3859.         if ($request->get('marque_add')) {
  3860.             if ($request->get('centre_type') == 1) {
  3861.                 $test_marque $this->em->getrepository(Marque::class)->find($request->get('marque_add'));
  3862.                 $rendez_vous_vehicules->setMarque($test_marque);
  3863.                 if ($request->get('modele_add')) {
  3864.                     $test_modele $this->em->getrepository(Modele::class)->find($request->get('modele_add'));
  3865.                     $rendez_vous_vehicules->setModele($test_modele);
  3866.                 }
  3867.             } else if ($request->get('centre_type') == 4) {
  3868.                 $test_marque $this->em->getrepository(MarqueCl::class)->find($request->get('marque_add'));
  3869.                 $rendez_vous_vehicules->setMarqueCl($test_marque);
  3870.                 if ($request->get('modele_add')) {
  3871.                     $test_modele $this->em->getrepository(ModeleCl::class)->find($request->get('modele_add'));
  3872.                     $rendez_vous_vehicules->setModeleCl($test_modele);
  3873.                 }
  3874.             }
  3875.         }
  3876.         if ($request->get('type_vehicule_add')) {
  3877.             $test_type_vehicule $this->em->getrepository(TypeVehicule::class)->find($request->get('type_vehicule_add'));
  3878.             $rendez_vous_vehicules->setTypeVehicule($test_type_vehicule);
  3879.         }
  3880.         if ($request->get('client_compte_id')) {
  3881.             $test_client_compte $this->em->getrepository(ClientCompte::class)->find($request->get('client_compte_id'));
  3882.             if ($test_client_compte) {
  3883.                 $rendez_vous_vehicules->setClientCompte($test_client_compte);
  3884.             }
  3885.         }
  3886.         if ($request->get('energie_add')) {
  3887.             $test_energie $this->em->getrepository(Energie::class)->find($request->get('energie_add'));
  3888.             $rendez_vous_vehicules->setEnergie($test_energie);
  3889.         }
  3890.         $rendez_vous_vehicules->setRdvVhcImmatriculation($request->get('immatriculation_add'));
  3891.         $rendez_vous_vehicules->setRdvVhcDateEcheance($request->get('date_echeance_ct_add') ? new datetime($request->get('date_echeance_ct_add')) : null);
  3892.         $rendez_vous_vehicules->setRdvVhcTypeProprietaire($request->get('type_proprietaire'));
  3893.         $rendez_vous_vehicules->setRdvVhcNomClientProprietaire($request->get('nom_add') ? $request->get('nom_add') : '');
  3894.         $rendez_vous_vehicules->setRdvVhcPrenomClientProprietaire($request->get('prenom_add') ? $request->get('prenom_add') : '');
  3895.         $manager->persist($rendez_vous_vehicules);
  3896.         $manager->flush();
  3897.         return new JsonResponse($rendez_vous_vehicules->getId());
  3898.     }
  3899.     /**
  3900.      * @Route("admin/rendez_vous_vehicule_pl_add", name="rendez_vous_vehicule_pl_add")
  3901.      */
  3902.     public function AddRendezVousVehiculePl(Request $requestObjectManager $manager)
  3903.     {
  3904.         $permissionResult $this->checkPermissionAdmin("ecrire""calendrier");
  3905.         if ($permissionResult instanceof RedirectResponse) {
  3906.             return $permissionResult;
  3907.         }
  3908.         if ($request->get('id_vehicule')) {
  3909.             $rendez_vous_vehicules $this->em->getrepository(RendezVousVehicule::class)->find($request->get('id_vehicule'));
  3910.         } else {
  3911.             $rendez_vous_vehicules = new RendezVousVehicule();
  3912.         }
  3913.         if ($request->get('type_vehicule_pl_add')) {
  3914.             $test_type_vehicule $this->em->getrepository(TypeVehicule::class)->find($request->get('type_vehicule_pl_add'));
  3915.             $rendez_vous_vehicules->setTypeVehicule($test_type_vehicule);
  3916.         }
  3917.         if ($request->get('client_compte_pl_id')) {
  3918.             $test_client_compte $this->em->getrepository(ClientCompte::class)->find($request->get('client_compte_pl_id'));
  3919.             if ($test_client_compte) {
  3920.                 $rendez_vous_vehicules->setClientCompte($test_client_compte);
  3921.             }
  3922.         }
  3923.         if ($request->get('energie_pl_add')) {
  3924.             $test_energie $this->em->getrepository(Energie::class)->find($request->get('energie_pl_add'));
  3925.             $rendez_vous_vehicules->setEnergie($test_energie);
  3926.         }
  3927.         if ($request->get('type_proprietaire_pl') == 'Client') {
  3928.             $rendez_vous_vehicules->setRdvVhcNomClientProprietaire($request->get('nom_proprietaire') ? $request->get('nom_proprietaire') : '');
  3929.             $rendez_vous_vehicules->setRdvVhcPrenomClientProprietaire($request->get('prenom_proprietaire') ? $request->get('prenom_proprietaire') : '');
  3930.         } else {
  3931.             $rendez_vous_vehicules->setRdvVhcNomClientProprietaire('');
  3932.             $rendez_vous_vehicules->setRdvVhcPrenomClientProprietaire('');
  3933.         }
  3934.         $rendez_vous_vehicules->setRdvVhcImmatriculation($request->get('immatriculation_pl_add'));
  3935.         $rendez_vous_vehicules->setRdvVhcDateEcheance($request->get('date_echeance_ct_pl_add') ? new datetime($request->get('date_echeance_ct_pl_add')) : null);
  3936.         $rendez_vous_vehicules->setRdvVhcTypeProprietaire($request->get('type_proprietaire_pl'));
  3937.         $rendez_vous_vehicules->setRdvVhcRefParc($request->get('reference_parc_pl_add'));
  3938.         $rendez_vous_vehicules->setRdvVhcNumSerie($request->get('numero_de_serie_pl_add'));
  3939.         $rendez_vous_vehicules->setRdvVhcDescription($request->get('description_pl_add'));
  3940.         $rendez_vous_vehicules->setRdvVhcDateChronotachygraphe($request->get('date_chrono_ct_pl_add') ? new datetime($request->get('date_chrono_ct_pl_add')) : null);
  3941.         $rendez_vous_vehicules->setRdvVhcDateLimiteurVitesse($request->get('date_limiteur_pl_add') ? new datetime($request->get('date_limiteur_pl_add')) : null);
  3942.         $rendez_vous_vehicules->setRdvVhcZoneSaisie1($request->get('zone_de_saisie_1_pl_add'));
  3943.         $rendez_vous_vehicules->setRdvVhcZoneSaisie2($request->get('zone_de_saisie_2_pl_add'));
  3944.         $rendez_vous_vehicules->setRdvVhcZoneSaisie3($request->get('zone_de_saisie_3_pl_add'));
  3945.         $rendez_vous_vehicules->setRdvVhcDateSaisie1($request->get('date_de_saisie_1_pl_add') ? new datetime($request->get('date_de_saisie_1_pl_add')) : null);
  3946.         $rendez_vous_vehicules->setRdvVhcDateSaisie2($request->get('date_de_saisie_2_pl_add') ? new datetime($request->get('date_de_saisie_2_pl_add')) : null);
  3947.         $rendez_vous_vehicules->setRdvVhcDateSaisie3($request->get('date_de_saisie_3_pl_add') ? new datetime($request->get('date_de_saisie_3_pl_add')) : null);
  3948.         $manager->persist($rendez_vous_vehicules);
  3949.         $manager->flush();
  3950.         return new JsonResponse($rendez_vous_vehicules->getId());
  3951.     }
  3952.     /**
  3953.      * @Route("admin/rendez_vous_add", name="rendez_vous_add")
  3954.      */
  3955.     public function AddRendezVous(Request $requestObjectManager $manager)
  3956.     {
  3957.         $permissionResult $this->checkPermissionAdmin("ecrire""calendrier");
  3958.         $tarifTotal '';
  3959.         if ($permissionResult instanceof RedirectResponse) {
  3960.             return $permissionResult;
  3961.         }
  3962.         $centre_type $this->em->getrepository(CentreType::class)->find($request->get('centre_type'));
  3963.         $centre $this->em->getrepository(Centre::class)->findOneBy(['centre_type' => $centre_type->getId(), 'centre_groupe' => $this->id]);
  3964.         $ligne $this->em->getrepository(Ligne::class)->find($request->get('ligne_id'));
  3965.         // Récupération de la date de début et de la durée du rendez-vous
  3966.         $dateDebut = new Datetime($request->get('date'));
  3967.         // Récupération de la durée en fonction du type de centre
  3968.         if ($request->get('centre_type') == 1) {
  3969.             $duree $request->get('duree');
  3970.         } elseif ($request->get('centre_type') == 2) {
  3971.             $duree $request->get('duree_pl');
  3972.         } elseif ($request->get('centre_type') == 4) {
  3973.             $duree $request->get('duree');
  3974.         } else {
  3975.             return new JsonResponse(['message' => 'Aucun centre type n\'est sélectionné.'], Response::HTTP_BAD_REQUEST);
  3976.         }
  3977.         if ($request->get('tcheckDispo') !== 'false') {
  3978.             // Calcul de la date de fin à partir de la date de début et de la durée
  3979.             $dateFin = clone $dateDebut;
  3980.             $dateFin->add(new DateInterval('PT' $duree 'M'));
  3981.             // Récupération des rendez-vous ou blocage existants pour cette ligne et ce créneau
  3982.             $rendezVousLigneExistants $this->em->getRepository(Rendezvous::class)->rendezVousExistByLigne($ligne$dateDebut$dateFin$request->get('rendezvous_id'));
  3983.             $blocageLigneExistants $this->em->getRepository(LigneBlocage::class)->blocageExistByLigne($ligne$dateDebut$dateFin'');
  3984.             // Si des rendez-vous ou blocage existent, rechercher un créneau disponible sur une autre ligne
  3985.             if (count($rendezVousLigneExistants) > || count($blocageLigneExistants) > 0) {
  3986.                 $ligne null;
  3987.                 $rendezVousExistantsAutreLigne $this->em->getRepository(Rendezvous::class)->rendezVousExistByCentreGroupe($this->id$dateDebut$dateFin);
  3988.                 $blocageExistantsAutreLigne $this->em->getRepository(LigneBlocage::class)->blocageExistByCentreGroupe($this->id$dateDebut$dateFin);
  3989.                 // Si aucun rendez-vous ou blocage n'existe sur une autre ligne
  3990.                 if (count($rendezVousExistantsAutreLigne) !== || count($blocageExistantsAutreLigne) !== 0) {
  3991.                     // Si des rendez-vous ou blocage existent sur d'autres lignes, choisir le premier créneau disponible
  3992.                     $lignesOccupees = [];
  3993.                     foreach ($rendezVousExistantsAutreLigne as $rendezVousAutreLigne) {
  3994.                         $lignesOccupees[] = $rendezVousAutreLigne->getLigne()->getId();
  3995.                     }
  3996.                     foreach ($blocageExistantsAutreLigne as $blocageAutreLigne) {
  3997.                         $lignesOccupees[] = $blocageAutreLigne->getLigne()->getId();
  3998.                     }
  3999.                     // Récupération des lignes disponibles pour ce type de centre et ce groupe
  4000.                     $lignesByCentreTypeAndCentre $this->em->getRepository(Ligne::class)->findByCentreGroupeActifAndCentreType($this->id$centre_type->getId());
  4001.                     foreach ($lignesByCentreTypeAndCentre as $ligneLibre) {
  4002.                         if (!in_array($ligneLibre->getId(), $lignesOccupees)) {
  4003.                             // si l'id de la ligne est différent de l'id de la ligne occupée
  4004.                             $ligne $ligneLibre// on stocke la ligne libre dans la variable $ligne
  4005.                             break; // on sort de la boucle car on a trouvé la ligne recherchée
  4006.                         }
  4007.                     }
  4008.                     if ($ligne === null) {
  4009.                         // Si toutes les lignes sont occupées, renvoyer une erreur
  4010.                         return new JsonResponse(['message' => 'Toutes les lignes sont occupées pour ce créneau.'], Response::HTTP_BAD_REQUEST);
  4011.                     }
  4012.                 }
  4013.             }
  4014.         }
  4015.         if ($request->get('rendezvous_id')) {
  4016.             $rendezvous $this->em->getrepository(Rendezvous::class)->find($request->get('rendezvous_id'));
  4017.             $rendezvous->setRdvDateModification(new Datetime());
  4018.             if(!$rendezvous->getTokenRendezVous()){
  4019.                 $rendezvous->setTokenRendezVous(md5(uniqid()));
  4020.             }
  4021.         } else {
  4022.             $rendezvous = new Rendezvous();
  4023.             $rendezvous->setTokenRendezVous(md5(uniqid()));
  4024.             $rendezvous->setRdvDateCreation(new Datetime());
  4025.         }
  4026.         if ($request->get('centre_type') == || $request->get('centre_type') == 4) {
  4027.             $centre_prestation $this->em->getrepository(CentrePrestation::class)->find($request->get('prestation'));
  4028.             if ($request->get('rendezvous_id')) {
  4029.                 $rendezvous $this->em->getrepository(Rendezvous::class)->find($request->get('rendezvous_id'));
  4030.             } else {
  4031.                 $rendezvous->setRdvTarif(number_format($centre_prestation->getPstTarif(), 2'.'''));
  4032.             }
  4033.             $utilisateur $this->em->getrepository(Utilisateur::class)->find($request->get('utilisateur'));
  4034.             if ($request->get('client_compte')) {
  4035.                 if ($rendezvous->getClientLibre()) {
  4036.                     $rendezvous->setClientLibre(null);
  4037.                 }
  4038.                 $client_compte $this->em->getrepository(ClientCompte::class)->find($request->get('client_compte'));
  4039.                 $rendezvous->setClientCompte($client_compte);
  4040.             } else {
  4041.                 if ($rendezvous->getClientCompte()) {
  4042.                     $rendezvous->setClientCompte(null);
  4043.                 }
  4044.                 if ($rendezvous->getClientLibre()) {
  4045.                     $client_libre $rendezvous->getClientLibre();
  4046.                 } else {
  4047.                     $client_libre = new ClientLibre;
  4048.                 }
  4049.                 $client_libre->setClNom($request->get('nom'));
  4050.                 if ($request->get('prenom')) {
  4051.                     $client_libre->setClPrenom($request->get('prenom'));
  4052.                 } else {
  4053.                     $client_libre->setClPrenom(null);
  4054.                 }
  4055.                 if ($request->get('email')) {
  4056.                     $client_libre->setClEmail($request->get('email'));
  4057.                 } else {
  4058.                     $client_libre->setClEmail(null);
  4059.                 }
  4060.                 if ($request->get('telephone')) {
  4061.                     $client_libre->setClTelephone($request->get('telephone'));
  4062.                 } else {
  4063.                     $client_libre->setClTelephone(null);
  4064.                 }
  4065.                 if ($request->get('civilite')) {
  4066.                     $client_libre->setClCivilite($request->get('civilite'));
  4067.                 } else {
  4068.                     $client_libre->setClCivilite(null);
  4069.                 }
  4070.                 $manager->persist($client_libre);
  4071.                 $rendezvous->setClientLibre($client_libre);
  4072.             }
  4073.             $rendezvous->setCentre($centre);
  4074.             $rendezvous->setUtilisateur($utilisateur);
  4075.             $rendezvous->setCentreType($centre_type);
  4076.             $rendezvous->setLigne($ligne);
  4077.             $rendezvous->setRdvDateHeure(new Datetime($request->get('date')));
  4078.             $rendezvous->setRdvDuree($request->get('duree'));
  4079.             $rendezvous->setRdvCommentaire($request->get('commentaire') ? $request->get('commentaire') : null);
  4080.             $rendezvous->setRdvBonCommande($request->get('bon_commande') ? $request->get('bon_commande') : null);
  4081.             $rendezvous->setRdvDemandeRappelSms($request->get('rappel_sms_vl') !== 'false');
  4082.             $manager->persist($rendezvous);
  4083.             if ($request->get('vehicule_client') == '') {
  4084.                 $rendez_vous_vehicules = new RendezVousVehicule();
  4085.                 if ($request->get('client_compte')) {
  4086.                     $rendez_vous_vehicules->setClientCompte($client_compte);
  4087.                 }
  4088.             } else {
  4089.                 $rendez_vous_vehicules $this->em->getrepository(RendezVousVehicule::class)->find($request->get('vehicule_client'));
  4090.                 if ($request->get('client_compte')) {
  4091.                     $rendez_vous_vehicules->setClientCompte($client_compte);
  4092.                 }
  4093.             }
  4094.             if ($request->get('marque') && $request->get('centre_type') == 1) {
  4095.                 $marque $this->em->getrepository(Marque::class)->find($request->get('marque'));
  4096.                 $rendez_vous_vehicules->setMarque($marque);
  4097.                 if ($request->get('modele')) {
  4098.                     $modele $this->em->getrepository(Modele::class)->find($request->get('modele'));
  4099.                     $rendez_vous_vehicules->setModele($modele);
  4100.                 }
  4101.                 if($rendez_vous_vehicules->getMarque()->getId() > and $rendez_vous_vehicules->getModele()->getId() === 1) {
  4102.                     $modele $this->em->getrepository(Modele::class)->findOneBy(['code_marque' => $rendez_vous_vehicules->getMarque()->getId(), 'mdl_libele' => 'AUTRES MODELES']);
  4103.                     $rendez_vous_vehicules->setModele($modele);
  4104.                 }
  4105.             }
  4106.             if ($request->get('marque_cl') && $request->get('centre_type') == 4) {
  4107.                 $marqueCl $this->em->getrepository(MarqueCl::class)->find($request->get('marque_cl'));
  4108.                 $rendez_vous_vehicules->setMarqueCl($marqueCl);
  4109.                 if ($request->get('modele_cl')) {
  4110.                     $modeleCl $this->em->getrepository(ModeleCl::class)->find($request->get('modele_cl'));
  4111.                     $rendez_vous_vehicules->setModeleCl($modeleCl);
  4112.                 }
  4113.                 if($rendez_vous_vehicules->getMarqueCl()->getId() > and $rendez_vous_vehicules->getModeleCl()->getId() === 1) {
  4114.                     $modele $this->em->getrepository(ModeleCl::class)->findOneBy(['code_marque_cl' => $rendez_vous_vehicules->getMarqueCl()->getId(), 'mdl_libele' => 'AUTRES MODELES']);
  4115.                     $rendez_vous_vehicules->setModeleCl($modele);
  4116.                 }
  4117.             }
  4118.             if ($request->get('energie')) {
  4119.                 $test_energie $this->em->getrepository(Energie::class)->find($request->get('energie'));
  4120.                 $rendez_vous_vehicules->setEnergie($test_energie);
  4121.             }
  4122.             $rendez_vous_vehicules->setRdvVhcTypeProprietaire('Autre');
  4123.             $rendez_vous_vehicules->setRdvVhcImmatriculation($request->get('immatriculation') !== '' $request->get('immatriculation') : null);
  4124.             $manager->persist($rendez_vous_vehicules);
  4125.             if ($rendezvous->getRendezVousInfos()[0]) {
  4126.                 $rendezvous_infos $rendezvous->getRendezVousInfos()[0];
  4127.             } else {
  4128.                 $rendezvous_infos = new RendezVousInfos();
  4129.             }
  4130.             $rendezvous_infos->setCentrePrestation($centre_prestation);
  4131.             $rendezvous_infos->setVehicule($rendez_vous_vehicules);
  4132.             $rendezvous_infos->setRendezvous($rendezvous);
  4133.             $rendezvous_infos->setRdvInfConvoyage($request->get('convoyage') !== 'false');
  4134.             $rendezvous_infos->setRdvInfPret($request->get('pret') !== 'false');
  4135.             $rendezvous_infos->setRdvInfDepot($request->get('depot') !== 'false');
  4136.             $manager->persist($rendezvous_infos);
  4137.             $manager->flush();
  4138.             $tarifTotal $centre_prestation->getPstTarif();
  4139.             //envoi rdv a autoplanning
  4140.             if (!$request->get('rendezvous_id')) {
  4141.                 $this->apiController->sendAddRdvToAutoPlanning($rendezvous);
  4142.                 $this->apiController->sendAddRdvToCtMalin($rendezvous);
  4143.             }
  4144.             if ($request->get('coupon_ct_easy')) {
  4145.                 $this->setInfoFromCteasy($rendezvous$request);
  4146.             }
  4147.             if ($request->get('email_confirmation_vl') == 'true') {
  4148.                 $this->apiController->envoi_email_confirmation_client($rendezvous);
  4149.             }
  4150.             if ($request->get('envoi_sms_vl') == 'true' && $request->get('telephone') != '') {
  4151.                 $this->apiController->EnvoiSmsRdvConfirm($rendezvous$request->get('telephone'));
  4152.             }
  4153.         } elseif ($request->get('centre_type') == 2) {
  4154.             $utilisateur $this->em->getrepository(Utilisateur::class)->find($request->get('utilisateur_pl'));
  4155.             if ($request->get('client_compte_pl')) {
  4156.                 $client_comptes_pl $this->em->getrepository(ClientCompte::class)->find($request->get('client_compte_pl'));
  4157.                 $tarif 0;
  4158.                 for ($i 0$i count($request->get('prestation_pl')); $i++) {
  4159.                     $centre_prestation $this->em->getrepository(CentrePrestation::class)->find($request->get('prestation_pl')[$i]);
  4160.                     if ($request->get('vehicule_client_pl')[$i] !== 'vehiculeGenerique') {
  4161.                         $rendez_vous_vehicules $this->em->getrepository(RendezVousVehicule::class)->find($request->get('vehicule_client_pl')[$i]);
  4162.                     } else {
  4163.                         $rendez_vous_vehicules = new RendezVousVehicule();
  4164.                         $marque $this->em->getrepository(Marque::class)->find(1);
  4165.                         $modele $this->em->getrepository(Modele::class)->find(1);
  4166.                         $rendez_vous_vehicules->setMarque($marque);
  4167.                         $rendez_vous_vehicules->setModele($modele);
  4168.                         $rendez_vous_vehicules->setRdvVhcTypeProprietaire('Autre');
  4169.                         $manager->persist($rendez_vous_vehicules);
  4170.                     }
  4171.                     $tarifTotal $centre_prestation->getPstTarif() + $tarif;
  4172.                     $tarif $centre_prestation->getPstTarif();
  4173.                     if ($rendezvous->getRendezVousInfos()[$i] == '') {
  4174.                         $rendezvous_infos = new RendezVousInfos();
  4175.                     } else {
  4176.                         $rendezvous_infos $rendezvous->getRendezVousInfos()[$i];
  4177.                     }
  4178.                     $rendezvous_infos->setCentrePrestation($centre_prestation);
  4179.                     $rendezvous_infos->setVehicule($rendez_vous_vehicules);
  4180.                     $rendezvous_infos->setRendezvous($rendezvous);
  4181.                     $rendezvous_infos->setRdvInfConvoyage($request->get('convoyage_pl') !== 'false');
  4182.                     $rendezvous_infos->setRdvInfPret($request->get('pret_pl') !== 'false');
  4183.                     $rendezvous_infos->setRdvInfDepot($request->get('depot_pl') !== 'false');
  4184.                     $manager->persist($rendezvous_infos);
  4185.                 }
  4186.                 $rendezvous->setClientCompte($client_comptes_pl);
  4187.                 $rendezvous->setCentre($centre);
  4188.                 $rendezvous->setUtilisateur($utilisateur);
  4189.                 $rendezvous->setCentreType($centre_type);
  4190.                 $rendezvous->setLigne($ligne);
  4191.                 $rendezvous->setRdvDateHeure(new Datetime($request->get('date')));
  4192.                 $rendezvous->setRdvDuree($request->get('duree_pl'));
  4193.                 $rendezvous->setRdvCommentaire($request->get('commentaire_pl') ? $request->get('commentaire_pl') : null);
  4194.                 $rendezvous->setRdvBonCommande($request->get('bon_commande_pl') ? $request->get('bon_commande_pl') : null);
  4195.                 $rendezvous->setRdvDemandeRappelSms($request->get('rappel_sms_pl') !== 'false');
  4196.                 $rendezvous->setRdvTarif($tarifTotal);
  4197.                 $manager->persist($rendezvous);
  4198.                 $manager->flush();
  4199.                 if ($request->get('envoi_sms_pl') == 'true' && $client_comptes_pl->getCliTelephone() != '') {
  4200.                     $this->apiController->EnvoiSmsRdvConfirm($rendezvous$client_comptes_pl->getCliTelephone());
  4201.                 }
  4202.             } else {
  4203.                 if ($rendezvous->getClientLibre()) {
  4204.                     $client_libre $rendezvous->getClientLibre();
  4205.                 } else {
  4206.                     $client_libre = new ClientLibre;
  4207.                 }
  4208.                 $client_libre->setClNom($request->get('nom_pl'));
  4209.                 if ($request->get('email_pl')) {
  4210.                     $client_libre->setClEmail($request->get('email_pl'));
  4211.                 }
  4212.                 if ($request->get('telephone_pl')) {
  4213.                     $client_libre->setClTelephone($request->get('telephone_pl'));
  4214.                 }
  4215.                 if ($request->get('civilite_pl')) {
  4216.                     $client_libre->setClCivilite($request->get('civilite_pl'));
  4217.                 }
  4218.                 $manager->persist($client_libre);
  4219.                 $tarif 0;
  4220.                 for ($i 0$i count($request->get('prestation_pl')); $i++) {
  4221.                     $centre_prestation $this->em->getrepository(CentrePrestation::class)->find($request->get('prestation_pl')[$i]);
  4222.                     $type_vehicules $this->em->getrepository(TypeVehicule::class)->find($request->get('type_vehicule')[$i]);
  4223.                     if ($request->get('energie_pl')[$i]) {
  4224.                         $energie $this->em->getrepository(Energie::class)->find($request->get('energie_pl')[$i]);
  4225.                     } else {
  4226.                         $energie null;
  4227.                     }
  4228.                     $tarifTotal $centre_prestation->getPstTarif() + $tarif;
  4229.                     $tarif $centre_prestation->getPstTarif();
  4230.                     if ($rendezvous->getRendezVousInfos()[$i] == '') {
  4231.                         $rendezvous_infos = new RendezVousInfos();
  4232.                         $rendez_vous_vehicules = new RendezVousVehicule();
  4233.                         $marque $this->em->getrepository(Marque::class)->find(1);
  4234.                         $modele $this->em->getrepository(Modele::class)->find(1);
  4235.                         $rendez_vous_vehicules->setMarque($marque);
  4236.                         $rendez_vous_vehicules->setModele($modele);
  4237.                     } else {
  4238.                         $rendezvous_infos $rendezvous->getRendezVousInfos()[$i];
  4239.                         $rendez_vous_vehicules $rendezvous_infos->getVehicule();
  4240.                     }
  4241.                     $rendezvous_infos->setCentrePrestation($centre_prestation);
  4242.                     $rendezvous_infos->setVehicule($rendez_vous_vehicules);
  4243.                     $rendezvous_infos->setRendezvous($rendezvous);
  4244.                     $rendezvous_infos->setRdvInfConvoyage($request->get('convoyage_pl') !== 'false');
  4245.                     $rendezvous_infos->setRdvInfPret($request->get('pret_pl') !== 'false');
  4246.                     $rendezvous_infos->setRdvInfDepot($request->get('depot_pl') !== 'false');
  4247.                     $rendez_vous_vehicules->setTypeVehicule($type_vehicules);
  4248.                     $rendez_vous_vehicules->setEnergie($energie);
  4249.                     $rendez_vous_vehicules->setRdvVhcImmatriculation($request->get('immatriculation_pl')[$i] ? $request->get('immatriculation_pl')[$i] : null);
  4250.                     $rendez_vous_vehicules->setRdvVhcTypeProprietaire('Autre');
  4251.                     $manager->persist($rendezvous_infos);
  4252.                     $manager->persist($rendez_vous_vehicules);
  4253.                 }
  4254.                 $rendezvous->setClientLibre($client_libre);
  4255.                 $rendezvous->setCentre($centre);
  4256.                 $rendezvous->setUtilisateur($utilisateur);
  4257.                 $rendezvous->setCentreType($centre_type);
  4258.                 $rendezvous->setLigne($ligne);
  4259.                 $rendezvous->setRdvDateHeure(new Datetime($request->get('date')));
  4260.                 $rendezvous->setRdvDuree($request->get('duree_pl'));
  4261.                 $rendezvous->setRdvCommentaire($request->get('commentaire_pl') ? $request->get('commentaire_pl') : null);
  4262.                 $rendezvous->setRdvBonCommande($request->get('bon_commande_pl') ? $request->get('bon_commande_pl') : null);
  4263.                 $rendezvous->setRdvDemandeRappelSms($request->get('rappel_sms_pl') !== 'false');
  4264.                 $rendezvous->setRdvVehiculePresent(false);
  4265.                 $rendezvous->setRdvTermine(false);
  4266.                 $rendezvous->setRdvNotifPayline(false);
  4267.                 $rendezvous->setNombreModification(false);
  4268.                 $rendezvous->setRdvTarif($tarifTotal);
  4269.                 $manager->persist($rendezvous);
  4270.                 $manager->flush();
  4271.                 if ($request->get('envoi_sms_pl') == 'true' && $request->get('telephone_pl') != '') {
  4272.                     $this->apiController->EnvoiSmsRdvConfirm($rendezvous$request->get('telephone_pl'));
  4273.                 }
  4274.             }
  4275.             if ($request->get('email_confirmation_pl') == 'true') {
  4276.                 $this->apiController->envoi_email_confirmation_client($rendezvous);
  4277.             }
  4278.         }
  4279.         $this->cache->delete('utilisateur' $this->id);
  4280.         // =========================================================================
  4281.         // CONSTRUCTION DE L'OBJET EVENT POUR FULLCALENDAR
  4282.         // =========================================================================
  4283.         // 1. Récupération des données Client
  4284.         $nom ''$telephone ''$email ''$clientCompteId null$clientLibreId null;
  4285.         $clientHonorePasRdv false// Valeur par défaut
  4286.         if ($rendezvous->getClientCompte()) {
  4287.             $client $rendezvous->getClientCompte();
  4288.             $nom $client->getCliNom(); // Adapter selon votre entité (ex: getNom())
  4289.             $telephone $client->getCliTelephone();
  4290.             $email $client->getCliEmail();
  4291.             $clientCompteId $client->getId();
  4292.             // $clientHonorePasRdv = $client->isHonorePasRdv(); // Décommentez si cette méthode existe
  4293.         } elseif ($rendezvous->getClientLibre()) {
  4294.             $client $rendezvous->getClientLibre();
  4295.             $nom $client->getClNom() . ' ' $client->getClPrenom();
  4296.             $telephone $client->getClTelephone();
  4297.             $email $client->getClEmail();
  4298.             $clientLibreId $client->getId();
  4299.         }
  4300.         // 2. Récupération des données Véhicules / Prestations
  4301.         $vehiculeNom = [];
  4302.         $immatriculationPl = [];
  4303.         $prestationId null;
  4304.         $typeVehiculeId null;
  4305.         $energieId null;
  4306.         $vehiculeId null;
  4307.         $vehiculeClientId null;
  4308.         $backgroundColor '#3788d8'// Couleur par défaut
  4309.         $partenaireColor $rendezvous->getPartenaire() ? $rendezvous->getPartenaire()->getPaCouleur() : '';
  4310.         $rendezVousInfosResultColor[] = $rendezvous_infos->getRdvInfResultat() ? $rendezvous_infos->getRdvInfResultat() : '';
  4311.         // Récupération Paramètre (pour InfoBulle)
  4312.         $parametreCentreGroupe $this->em->getRepository(ParametreCentreGroupe::class)->findOneBy(['centre_groupe' => $this->id]);
  4313.         $isInfoBulle $parametreCentreGroupe $parametreCentreGroupe->isPcgInfoBulle() : false;
  4314.         // Calcul date de fin
  4315.         $dateFin = (clone $rendezvous->getRdvDateHeure())->modify(sprintf('+%d minutes'$rendezvous->getRdvDuree()));
  4316.         $rendesVousVehicule $rendezvous_infos->getVehicule();
  4317.         $immatriculationPl[] = $rendesVousVehicule->getRdvVhcImmatriculation() ? $rendesVousVehicule->getRdvVhcImmatriculation() : '';
  4318.         $typeVehiculeId[] = $rendesVousVehicule->getTypeVehicule() ? $rendesVousVehicule->getTypeVehicule()->getId() : '';
  4319.         $tarifPresta[] = $rendezvous_infos->getCentrePrestation()->getPsttarif();
  4320.         $prestationId $rendezvous_infos->getCentrePrestation()->getId();
  4321.         $backgroundColor '#'.$rendezvous_infos->getCentrePrestation()->getPstCouleur();
  4322.         $vehiculeClientId $rendesVousVehicule->getId();
  4323.         $vehiculeNom[] =
  4324.             ($rendesVousVehicule->getRdvVhcImmatriculation() ? $rendesVousVehicule->getRdvVhcImmatriculation() . ' - ' '') .
  4325.             ($rendesVousVehicule->getMarque() ? $rendesVousVehicule->getMarque()->getMarquelibele() : '') . ($rendesVousVehicule->getMarqueCl() ? $rendesVousVehicule->getMarqueCl()->getMarquelibele() : '') . ' - ' .
  4326.             ($rendesVousVehicule->getModele() ? $rendesVousVehicule->getModele()->getMdllibele() : '') . ($rendesVousVehicule->getModeleCl() ? $rendesVousVehicule->getModeleCl()->getMdllibele() : '');
  4327.         $energieId[] = $rendesVousVehicule->getEnergie() ? $rendesVousVehicule->getEnergie()->getId() : '';
  4328.         $currentImmat $rendesVousVehicule->getRdvVhcImmatriculation() ? $rendesVousVehicule->getRdvVhcImmatriculation() : '';
  4329.         $currentMarque = ($rendesVousVehicule->getMarque() ? $rendesVousVehicule->getMarque()->getMarquelibele() : '') . ($rendesVousVehicule->getMarqueCl() ? $rendesVousVehicule->getMarqueCl()->getMarquelibele() : '');
  4330.         $currentModele = ($rendesVousVehicule->getModele() ? $rendesVousVehicule->getModele()->getMdllibele() : '') . ($rendesVousVehicule->getModeleCl() ? $rendesVousVehicule->getModeleCl()->getMdllibele() : '');
  4331.         $currentPresta $rendezvous_infos->getCentrePrestation()->getPsttypevisite()->getTypvstlibele();
  4332.         if ($currentImmat !== '') {
  4333.             $currentImmat $currentImmat ' / ';
  4334.         }
  4335.         if ($nom !== '') {
  4336.             $nom $nom ' / ';
  4337.         }
  4338.         $title[] = $nom $currentImmat $currentMarque ' - ' $currentModele ' / ' $currentPresta ' / ' $tarifTotal '€';
  4339.         // Construction du tableau
  4340.         $eventData = [
  4341.             'id' => (string) $rendezvous->getId(),
  4342.             'resourceId' => (string) $rendezvous->getLigne()->getId(),
  4343.             'title' => $title,
  4344.             'start' => $rendezvous->getRdvDateHeure()->format('Y-m-d H:i:s'),
  4345.             'end' => $dateFin->format('Y-m-d H:i:s'),
  4346.             'backgroundColor' => $backgroundColor,
  4347.             'extendedProps' => [
  4348.                 'nom' => $nom,
  4349.                 'telephone' => $telephone,
  4350.                 'email' => $email,
  4351.                 'duree' => (int)$rendezvous->getRdvDuree(),
  4352.                 'commentaire' => $rendezvous->getRdvCommentaire() ?? "",
  4353.                 // Booléens
  4354.                 'depot' => $rendezvous_infos->isRdvInfDepot() ,
  4355.                 'convoyage' => $rendezvous_infos->isRdvInfConvoyage() ,
  4356.                 'pret' => $rendezvous_infos->isRdvInfPret() ,
  4357.                 'rappelSms' => $rendezvous->isRdvDemandeRappelSms(),
  4358.                 'rappelConfirm' => $rendezvous->getRdvDemandeConfirmationSms(),
  4359.                 // IDs importants (aussi en string pour sécurité)
  4360.                 'rendezVousId' => (string)$rendezvous->getId(),
  4361.                 'ligneId' => (string)$rendezvous->getLigne()->getId(),
  4362.                 'utilisateurId' => $rendezvous->getUtilisateur() ? $rendezvous->getUtilisateur()->getId() : null,
  4363.                 // Champs tableaux (pour coller à votre structure existante)
  4364.                 'centreType' => [$rendezvous_infos->getCentrePrestation()->getPstTypeVisite()->getTypVstLibele()],
  4365.                 'centreTypeId' => $rendezvous->getCentreType()->getId(),
  4366.                 'prestationId' => $prestationId ? [$prestationId] : [],
  4367.                 'clientLibreId' => $clientLibreId,
  4368.                 'clientCompteId' => $clientCompteId $clientCompteId "",
  4369.                 'vehiculeNom' => $vehiculeNom// Tableau
  4370.                 'vehiculeId' => $vehiculeClientId ? [$vehiculeClientId] : [],
  4371.                 'immatriculationPl' => $immatriculationPl,
  4372.                 'typeVehiculeId' => $typeVehiculeId,
  4373.                 'tarifPresta' => $tarifPresta,
  4374.                 'energie' => $energieId,
  4375.                 'partenaireColor' => $partenaireColor,
  4376.                 'rendezVousInfosResultColor' => $rendezVousInfosResultColor,
  4377.                 // Autres champs simples
  4378.                 'tarifTotal' => number_format($rendezvous->getRdvTarif(), 2'.'''),
  4379.                 'heureDebut' => $rendezvous->getRdvDateHeure()->format('H:i'),
  4380.                 'heureFin' => $dateFin->format('H:i'),
  4381.                 'dateCreation' => $rendezvous->getRdvDateCreation()->format('d/m/Y H:i'),
  4382.                 'isInfoBulle' => $isInfoBulle,
  4383.                 'clientHonorePasRdv' => $clientHonorePasRdv,
  4384.                 'blocageId' => '',
  4385.                 'recurrenceId' => ''
  4386.             ],
  4387.         ];
  4388.         return new JsonResponse(['event' => $eventData'id' =>$rendezvous->getId()]);
  4389.     }
  4390.     //interroge le webservice de cteasy pour récuperre les infos d'un clientet de son véhicule en fonction d'un n° de coupon
  4391.     /**
  4392.      * @Route("admin/getCouponCteasy", name="getCouponCteasy")
  4393.      */
  4394.     public function getCouponCteasy(Request $request)
  4395.     {
  4396.         $url 'http://www.cteasy.com/httpHandlers/Bon/GetBon.ashx?key=7641d666-bab7-4e60-81bf-03d959b363a2&NumBon=' $request->get('coupon_ct_easy');
  4397.         // Envoi de la requête GET
  4398.         $ch curl_init($url);
  4399.         curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
  4400.         curl_setopt($chCURLOPT_SSL_VERIFYPEERfalse);
  4401.         $response curl_exec($ch);
  4402.         curl_close($ch);
  4403.         return new JsonResponse(json_decode($responsetrue));
  4404.     }
  4405.     public function setInfoFromCteasy($rdv$request)
  4406.     {
  4407.         $cteasy $this->getCouponCteasy($request);
  4408.         $reponse_cteasy json_decode($cteasy->getContent());
  4409.         if ($reponse_cteasy->Valid) {
  4410.             $facturationRdv $this->em->getrepository(RendezvousFacturation::class)->findOneBy(['rendezvous' => $rdv->getId()]);
  4411.             if (!$facturationRdv) {
  4412.                 $facturationRdv = new RendezvousFacturation();
  4413.                 $facturationRdv->setRendezVous($rdv);
  4414.             }
  4415.             $facturationRdv->setFpMontantPrestation($reponse_cteasy->Info->MontantPrestation);
  4416.             $facturationRdv->setFpMontantFraisService($reponse_cteasy->Info->MontantFraisService);
  4417.             $facturationRdv->isFpOptionCv($reponse_cteasy->Info->OptionCV);
  4418.             $facturationRdv->setFpOptionCvMontant($reponse_cteasy->Info->MontantOptionCV);
  4419.             $facturationRdv->isFpOptionModifiable($reponse_cteasy->Info->OptionReservationModifiable);
  4420.             $facturationRdv->setFpOptionModifiableMontant($reponse_cteasy->Info->MontantOptionReservationModifiable);
  4421.             $facturationRdv->isFpOptionPaiementMultiple($reponse_cteasy->Info->OptionPaiementPlusieursFois);
  4422.             $facturationRdv->setFpOptionPaiementMultipleMontant($reponse_cteasy->Info->MontantOptionPaiementPlusieursFois);
  4423.             $facturationRdv->setFpModeReglement($reponse_cteasy->Info->TypePaiementEcheance);
  4424.             $this->em->persist($facturationRdv);
  4425.             $rdv->setRdvTarif($reponse_cteasy->Info->MontantPrestation);
  4426.             $cteasy $this->em->getrepository(Partenaire::class)->find(1);
  4427.             $rdv->setPartenaire($cteasy);
  4428.             $rdv->setRdvCouponCteasy($request->get('coupon_ct_easy'));
  4429.             $this->em->persist($rdv);
  4430.             $this->em->flush();
  4431.         }
  4432.     }
  4433.     /**
  4434.      * @Route("admin/rendez_vous_remove", name="rendez_vous_remove")
  4435.      */
  4436.     public function RemoveRendezVous(Request $requestObjectManager $manager)
  4437.     {
  4438.         $permissionResult $this->checkPermissionAdmin("supp""calendrier");
  4439.         if ($permissionResult instanceof RedirectResponse) {
  4440.             return $permissionResult;
  4441.         }
  4442.         if (!$request->get('rendezvous_id')) {
  4443.             return new Response('cannot_delete_rdv_not_specified');
  4444.         }
  4445.         $rendezvous $this->em->getrepository(Rendezvous::class)->find($request->get('rendezvous_id'));
  4446.         $access $this->checkUserAccessToCentre($rendezvous->getCentre()->getid());
  4447.         if ($access !== true) {
  4448.             return $access;
  4449.         }
  4450.         $rendezVousInfos $this->em->getrepository(RendezVousInfos::class)->findBy(array('rendezvous' => $rendezvous));
  4451.         $RendezVousFacturation $this->em->getrepository(RendezVousFacturation::class)->findOneBy(array('rendezvous' => $rendezvous));
  4452.         if ($RendezVousFacturation) {
  4453.             $RendezVousPaiementMultiples $this->em->getrepository(RendezVousPaiementMultiple::class)->findBy(array('rendezvous_facturation' => $RendezVousFacturation->getId()));
  4454.             if ($RendezVousPaiementMultiples) {
  4455.                 foreach ($RendezVousPaiementMultiples as $RendezVousPaiementMultiple) {
  4456.                     $this->em->remove($RendezVousPaiementMultiple);
  4457.                 }
  4458.             }
  4459.             $this->em->remove($RendezVousFacturation);
  4460.         }
  4461.         foreach ($rendezVousInfos as $rendezVousInfo) {
  4462.             if ($rendezvous->getClientLibre()) {
  4463.                 $this->em->remove($rendezVousInfo->getVehicule());
  4464.             }
  4465.             $this->em->remove($rendezVousInfo);
  4466.         }
  4467.         if ($rendezvous->getClientLibre()) {
  4468.             $this->em->remove($rendezvous->getClientLibre());
  4469.         }
  4470.         //  $cheminFichier = '../supp_rdv_admin.txt';
  4471.         //  $fichier = fopen($cheminFichier, "a");
  4472.         $now = new \DateTime();
  4473.         $message $now->format('Y-m-d H:i:s') . ' n°= ' $rendezvous->getId() . ' User:' $this->getUser()->getUtlUsername();
  4474.         $this->logger->critical('---------------------- suppression manuel -------------------');
  4475.         $this->logger->critical($message);
  4476.         //  fwrite($fichier, $message . PHP_EOL);
  4477.         //  fclose($fichier);
  4478.         // Supprimer les entités
  4479.         $manager->remove($rendezvous);
  4480.         $manager->flush();
  4481.         $this->apiController->sendDeleteRdvToAutoPlanning($rendezvous->getCentre()->getCtrParametreCentre()->getPcAutoPlanningApiKey(), $rendezvous->getRdvIdAutoPlanning());
  4482.         $this->apiController->sendRemoveRdvToCtMalin($rendezvous);
  4483.         return new Response('ok');
  4484.     }
  4485.     /**
  4486.      * @Route("admin/rendez_vous_remboursement", name="rendez_vous_remboursement")
  4487.      */
  4488.     public function rendez_vous_remboursement(Request $requestObjectManager $manager)
  4489.     {
  4490.         $rendezvous $this->em->getrepository(Rendezvous::class)->findOneBy(['TokenPayline' => $request->get('token')]);
  4491.         $montant $request->get('montant') !== null ? (float) $request->get('montant') : null;
  4492.         if ($montant !== null) {
  4493.             $montant max(0.01min($montant$rendezvous->getRdvTarif()));
  4494.         }
  4495.         $return $this->PaylineController->envoiRefund($rendezvous$request$montant);
  4496.         if ($return['result'] == 'OK') {
  4497.             $this->apiController->envoi_email_remboursement_client($rendezvous$montant);
  4498.         }
  4499.         return new JsonResponse($return);
  4500.     }
  4501.     /**
  4502.      * @Route("admin/rendez_vous_remove_sms", name="rendez_vous_remove_sms")
  4503.      */
  4504.     public function RemoveRendezVousConfSms(Request $requestObjectManager $manager)
  4505.     {
  4506.         $permissionResult $this->checkPermissionAdmin("supp""calendrier");
  4507.         if ($permissionResult instanceof RedirectResponse) {
  4508.             return $permissionResult;
  4509.         }
  4510.         $rendezvousId $request->get('rendezvous_id');
  4511.         if (!$rendezvousId) {
  4512.             return new Response('cannot_delete_rdv_not_specified');
  4513.         }
  4514.         $rendezvous $this->em->getrepository(Rendezvous::class)->find($rendezvousId);
  4515.         if (!$rendezvous->getClientLibre()->getClTelephone() && !$rendezvous->getClientCompte()->getCliTelephone()) {
  4516.             return new Response('cannot_delete_telephone_not_specified');
  4517.         }
  4518.         $access $this->checkUserAccessToCentre($rendezvous->getCentre()->getid());
  4519.         if ($access !== true) {
  4520.             return $access;
  4521.         }
  4522.         $rendezVousInfos $this->em->getrepository(RendezVousInfos::class)->findBy(array('rendezvous' => $rendezvous));
  4523.         $RendezVousFacturation $this->em->getrepository(RendezVousFacturation::class)->findOneBy(array('rendezvous' => $rendezvous));
  4524.         if ($RendezVousFacturation) {
  4525.             $RendezVousPaiementMultiples $this->em->getrepository(RendezVousPaiementMultiple::class)->findBy(array('rendezvous_facturation' => $RendezVousFacturation->getId()));
  4526.             if ($RendezVousPaiementMultiples) {
  4527.                 foreach ($RendezVousPaiementMultiples as $RendezVousPaiementMultiple) {
  4528.                     $this->em->remove($RendezVousPaiementMultiple);
  4529.                 }
  4530.             }
  4531.             $this->em->remove($RendezVousFacturation);
  4532.         }
  4533.         foreach ($rendezVousInfos as $rendezVousInfo) {
  4534.             if ($rendezvous->getClientLibre()) {
  4535.                 $this->em->remove($rendezVousInfo->getVehicule());
  4536.             }
  4537.             $this->em->remove($rendezVousInfo);
  4538.         }
  4539.         if ($rendezvous->getClientLibre()) {
  4540.             $this->em->remove($rendezvous->getClientLibre());
  4541.         }
  4542.         if ($rendezvous->getClientCompte()) {
  4543.             $telephone $rendezvous->getClientCompte()->getCliTelephone();
  4544.         } else {
  4545.             $telephone $rendezvous->getClientLibre()->getClTelephone();
  4546.         }
  4547.         $this->apiController->EnvoiSmsRdvDelete($rendezvous$telephone);
  4548.         //  $cheminFichier = '../supp_rdv_admin.txt';
  4549.         //  $fichier = fopen($cheminFichier, "a");
  4550.         $now = new \DateTime();
  4551.         $message $now->format('Y-m-d H:i:s') . ' n°= ' $rendezvous->getId() . ' User:' $this->getUser()->getUtlUsername();
  4552.         $this->logger->critical('---------------------- suppression manuel -------------------');
  4553.         $this->logger->critical($message);
  4554.         //  fwrite($fichier, $message . PHP_EOL);
  4555.         //  fclose($fichier);
  4556.         // Supprimer les entités
  4557.         $manager->remove($rendezvous);
  4558.         $manager->flush();
  4559.         $this->apiController->sendDeleteRdvToAutoPlanning($rendezvous->getCentre()->getCtrParametreCentre()->getPcAutoPlanningApiKey(), $rendezvous->getRdvIdAutoPlanning());
  4560.         $this->apiController->sendRemoveRdvToCtMalin($rendezvous);
  4561.         return new Response('ok');
  4562.     }
  4563.     /**
  4564.      * @Route("admin/rendez_vous_remove_email", name="rendez_vous_remove_email")
  4565.      */
  4566.     public function RemoveRendezVousConfEmail(Request $requestObjectManager $manager)
  4567.     {
  4568.         $permissionResult $this->checkPermissionAdmin("supp""calendrier");
  4569.         if ($permissionResult instanceof RedirectResponse) {
  4570.             return $permissionResult;
  4571.         }
  4572.         $rendezvousId $request->get('rendezvous_id');
  4573.         if (!$rendezvousId) {
  4574.             return new Response('cannot_delete_rdv_not_specified');
  4575.         }
  4576.         $rendezvous $this->em->getrepository(Rendezvous::class)->find($rendezvousId);
  4577.         $rendezVousInfos $this->em->getrepository(RendezVousInfos::class)->findBy(array('rendezvous' => $rendezvous));
  4578.         $RendezVousFacturation $this->em->getrepository(RendezVousFacturation::class)->findOneBy(array('rendezvous' => $rendezvous));
  4579.         if ($RendezVousFacturation) {
  4580.             $RendezVousPaiementMultiples $this->em->getrepository(RendezVousPaiementMultiple::class)->findBy(array('rendezvous_facturation' => $RendezVousFacturation->getId()));
  4581.             if ($RendezVousPaiementMultiples) {
  4582.                 foreach ($RendezVousPaiementMultiples as $RendezVousPaiementMultiple) {
  4583.                     $this->em->remove($RendezVousPaiementMultiple);
  4584.                 }
  4585.             }
  4586.             $this->em->remove($RendezVousFacturation);
  4587.         }
  4588.         foreach ($rendezVousInfos as $rendezVousInfo) {
  4589.             if ($rendezvous->getClientLibre()) {
  4590.                 $this->em->remove($rendezVousInfo->getVehicule());
  4591.             }
  4592.             $this->em->remove($rendezVousInfo);
  4593.         }
  4594.         if ($rendezvous->getClientLibre()) {
  4595.             $this->em->remove($rendezvous->getClientLibre());
  4596.         }
  4597.         $return $this->apiController->envoi_email_suppression_rdv($rendezvous);
  4598.         // Vérification de l'erreur
  4599.         $responseArray json_decode($return->getContent(), true);
  4600.         if (!isset($responseArray['error'])) {
  4601.             foreach ($rendezVousInfos as $rendezVousInfo) {
  4602.                 $manager->remove($rendezVousInfo);
  4603.             }
  4604.             //  $cheminFichier = '../supp_rdv_admin.txt';
  4605.             //   $fichier = fopen($cheminFichier, "a");
  4606.             $now = new \DateTime();
  4607.             $message $now->format('Y-m-d H:i:s') . ' n°= ' $rendezvous->getId() . ' User:' $this->getUser()->getUtlUsername();
  4608.             $this->logger->critical('---------------------- suppression manuel -------------------');
  4609.             $this->logger->critical($message);
  4610.             //  fwrite($fichier, $message . PHP_EOL);
  4611.             //  fclose($fichier);
  4612.             // Supprimer les entités
  4613.             $manager->remove($rendezvous);
  4614.             $manager->flush();
  4615.             $this->apiController->sendDeleteRdvToAutoPlanning($rendezvous->getCentre()->getCtrParametreCentre()->getPcAutoPlanningApiKey(), $rendezvous->getRdvIdAutoPlanning());
  4616.             $this->apiController->sendRemoveRdvToCtMalin($rendezvous);
  4617.         }
  4618.         return new Response('ok');
  4619.     }
  4620.     /**
  4621.      * @Route("admin/rendez_vous_remove_email_sms", name="rendez_vous_remove_email_sms")
  4622.      */
  4623.     public function removeRendezVousEmailAndSms(Request $requestObjectManager $manager)
  4624.     {
  4625.         $permissionResult $this->checkPermissionAdmin("supp""calendrier");
  4626.         if ($permissionResult instanceof RedirectResponse) {
  4627.             return $permissionResult;
  4628.         }
  4629.         $rendezvousId $request->get('rendezvous_id');
  4630.         $rendezvous $this->em->getRepository(Rendezvous::class)->find($rendezvousId);
  4631.         if (!$rendezvousId || !$rendezvous) {
  4632.             return new Response('cannot_delete_rdv_not_specified');
  4633.         }
  4634.         $access $this->checkUserAccessToCentre($rendezvous->getCentre()->getId());
  4635.         if ($access !== true) {
  4636.             return $access;
  4637.         }
  4638.         $rendezVousInfos $this->em->getRepository(RendezVousInfos::class)->findBy(['rendezvous' => $rendezvous]);
  4639.         $RendezVousFacturation $this->em->getRepository(RendezVousFacturation::class)->findOneBy(['rendezvous' => $rendezvous]);
  4640.         if ($RendezVousFacturation) {
  4641.             $RendezVousPaiementMultiples $this->em->getRepository(RendezVousPaiementMultiple::class)->findBy(['rendezvous_facturation' => $RendezVousFacturation->getId()]);
  4642.             if ($RendezVousPaiementMultiples) {
  4643.                 foreach ($RendezVousPaiementMultiples as $RendezVousPaiementMultiple) {
  4644.                     $this->em->remove($RendezVousPaiementMultiple);
  4645.                 }
  4646.             }
  4647.             $this->em->remove($RendezVousFacturation);
  4648.         }
  4649.         foreach ($rendezVousInfos as $rendezVousInfo) {
  4650.             if ($rendezvous->getClientLibre()) {
  4651.                 $this->em->remove($rendezVousInfo->getVehicule());
  4652.             }
  4653.             $this->em->remove($rendezVousInfo);
  4654.         }
  4655.         if ($rendezvous->getClientLibre()) {
  4656.             $this->em->remove($rendezvous->getClientLibre());
  4657.         }
  4658.         if (!$rendezvous->getClientLibre()->getClTelephone() && !$rendezvous->getClientCompte()->getCliTelephone()) {
  4659.             return new Response('cannot_delete_telephone_not_specified');
  4660.         }
  4661.         if ($rendezvous->getClientCompte()) {
  4662.             $telephone $rendezvous->getClientCompte()->getCliTelephone();
  4663.         } else {
  4664.             $telephone $rendezvous->getClientLibre()->getClTelephone();
  4665.         }
  4666.         $this->apiController->EnvoiSmsRdvDelete($rendezvous$telephone);
  4667.         $return $this->apiController->envoi_email_suppression_rdv($rendezvous);
  4668.         // Vérification de l'erreur pour l'email
  4669.         $responseArray json_decode($return->getContent(), true);
  4670.         if (!isset($responseArray['error'])) {
  4671.             foreach ($rendezVousInfos as $rendezVousInfo) {
  4672.                 $manager->remove($rendezVousInfo);
  4673.             }
  4674.         } else {
  4675.             return $return;
  4676.         }
  4677.         //  $cheminFichier = '../supp_rdv_admin.txt';
  4678.         //  $fichier = fopen($cheminFichier, "a");
  4679.         $now = new \DateTime();
  4680.         $message $now->format('Y-m-d H:i:s') . ' n°= ' $rendezvous->getId() . ' User:' $this->getUser()->getUtlUsername();
  4681.         $this->logger->critical('---------------------- suppression manuel -------------------');
  4682.         $this->logger->critical($message);
  4683.         //  fwrite($fichier, $message . PHP_EOL);
  4684.         //  fclose($fichier);
  4685.         // Supprimer les entités
  4686.         $manager->remove($rendezvous);
  4687.         $manager->flush();
  4688.         $this->apiController->sendDeleteRdvToAutoPlanning($rendezvous->getCentre()->getCtrParametreCentre()->getPcAutoPlanningApiKey(), $rendezvous->getRdvIdAutoPlanning());
  4689.         $this->apiController->sendRemoveRdvToCtMalin($rendezvous);
  4690.         return new Response('ok');
  4691.     }
  4692.     /**
  4693.      * @Route("admin/rendez_vous_copier_coller", name="rendez_vous_copier_coller")
  4694.      */
  4695.     public function CopierCollerRendezVous(Request $requestObjectManager $manager)
  4696.     {
  4697.         $permissionResult $this->checkPermissionAdmin("ecrire""calendrier");
  4698.         if ($permissionResult instanceof RedirectResponse) {
  4699.             return $permissionResult;
  4700.         }
  4701.         $rendezvousId $request->get('rendezvous_id');
  4702.         if (!$rendezvousId) {
  4703.             return new Response('cannot_delete_rdv_not_specified');
  4704.         }
  4705.         $source $this->em->getrepository(Rendezvous::class)->find($rendezvousId);
  4706.         $ligne $this->em->getrepository(Ligne::class)->find($request->get('ligneId'));
  4707.         $typeRdv $source->getCentreType()->getId();
  4708.         $typeArray = [];
  4709.         if ($ligne->isLgnVl()) $typeArray[] = 1;
  4710.         if ($ligne->isLgnCl()) $typeArray[] = 4;
  4711.         if ($ligne->isLgnPl()) $typeArray[] = 2;
  4712.         if (!in_array($typeRdv$typeArray)) {
  4713.             return new Response('ko');
  4714.         }
  4715.         $copy = new Rendezvous();
  4716.         $copy->setTokenRendezVous(md5(uniqid()));
  4717.         $copy->setRdvDateCreation(new Datetime());
  4718.         $copy->setCentre($source->getCentre());
  4719.         $copy->setCentreType($source->getCentreType());
  4720.         $copy->setLigne($ligne);
  4721.         $copy->setRdvDateHeure(new Datetime($request->get('start')));
  4722.         $copy->setRdvDuree($source->getRdvDuree());
  4723.         $copy->setRdvTarif($source->getRdvTarif());
  4724.         $copy->setRdvCommentaire($source->getRdvCommentaire());
  4725.         $copy->setRdvColor($source->getRdvColor());
  4726.         $copy->setUtilisateur($source->getUtilisateur());
  4727.         if ($source->getClientCompte()) {
  4728.             $copy->setClientCompte($source->getClientCompte());
  4729.         }
  4730.         if ($source->getClientLibre()) {
  4731.             $srcCl $source->getClientLibre();
  4732.             $clCopy = new ClientLibre();
  4733.             $clCopy->setClNom($srcCl->getClNom());
  4734.             $clCopy->setClPrenom($srcCl->getClPrenom());
  4735.             $clCopy->setClEmail($srcCl->getClEmail());
  4736.             $clCopy->setClTelephone($srcCl->getClTelephone());
  4737.             $clCopy->setClCivilite($srcCl->getClCivilite());
  4738.             $manager->persist($clCopy);
  4739.             $copy->setClientLibre($clCopy);
  4740.         }
  4741.         if ($source->getPartenaire()) {
  4742.             $copy->setPartenaire($source->getPartenaire());
  4743.         }
  4744.         $manager->persist($copy);
  4745.         foreach ($source->getRendezVousInfos() as $sourceInfo) {
  4746.             $copyInfo = new RendezVousInfos();
  4747.             $copyInfo->setRendezvous($copy);
  4748.             $copyInfo->setCentrePrestation($sourceInfo->getCentrePrestation());
  4749.             $copyInfo->setRdvInfDepot($sourceInfo->isRdvInfDepot());
  4750.             $copyInfo->setRdvInfConvoyage($sourceInfo->isRdvInfConvoyage());
  4751.             $copyInfo->setRdvInfPret($sourceInfo->isRdvInfPret());
  4752.             if ($source->getClientLibre()) {
  4753.                 $srcVhc $sourceInfo->getVehicule();
  4754.                 $vhcCopy = new RendezVousVehicule();
  4755.                 $vhcCopy->setRdvVhcImmatriculation($srcVhc->getRdvVhcImmatriculation());
  4756.                 $vhcCopy->setRdvVhcTypeProprietaire($srcVhc->getRdvVhcTypeProprietaire() ?? '');
  4757.                 $vhcCopy->setRdvVhcNomClientProprietaire($srcVhc->getRdvVhcNomClientProprietaire() ?? '');
  4758.                 $vhcCopy->setRdvVhcPrenomClientProprietaire($srcVhc->getRdvVhcPrenomClientProprietaire());
  4759.                 $vhcCopy->setRdvVhcNumSerie($srcVhc->getRdvVhcNumSerie());
  4760.                 $vhcCopy->setRdvVhcDescription($srcVhc->getRdvVhcDescription());
  4761.                 if ($srcVhc->getMarque()) $vhcCopy->setMarque($srcVhc->getMarque());
  4762.                 if ($srcVhc->getModele()) $vhcCopy->setModele($srcVhc->getModele());
  4763.                 if ($srcVhc->getTypeVehicule()) $vhcCopy->setTypeVehicule($srcVhc->getTypeVehicule());
  4764.                 if ($srcVhc->getEnergie()) $vhcCopy->setEnergie($srcVhc->getEnergie());
  4765.                 $manager->persist($vhcCopy);
  4766.                 $copyInfo->setVehicule($vhcCopy);
  4767.             } else {
  4768.                 $copyInfo->setVehicule($sourceInfo->getVehicule());
  4769.             }
  4770.             $manager->persist($copyInfo);
  4771.         }
  4772.         $manager->flush();
  4773.         return new JsonResponse(['status' => 'ok''id' => $copy->getId()]);
  4774.     }
  4775.     /**
  4776.      * @Route("admin/rendez_vous_drag_and_drop", name="rendez_vous_drag_and_drop")
  4777.      */
  4778.     public function DragAndDropRendezVous(Request $requestObjectManager $manager)
  4779.     {
  4780.         $permissionResult $this->checkPermissionAdmin("ecrire""calendrier");
  4781.         if ($permissionResult instanceof RedirectResponse) {
  4782.             return $permissionResult;
  4783.         }
  4784.         $rendezvousId $request->get('rendezvous_id');
  4785.         if (!$rendezvousId) {
  4786.             return new Response('cannot_delete_rdv_not_specified');
  4787.         }
  4788.         $rendezvous $this->em->getrepository(Rendezvous::class)->find($rendezvousId);
  4789.         $ligne $this->em->getrepository(Ligne::class)->find($request->get('ligneId'));
  4790.         $typeRdv $rendezvous->getCentreType()->getId();
  4791.         $typeArray = [];
  4792.         $isVl $ligne->isLgnVl();
  4793.         $isCl $ligne->isLgnCl();
  4794.         $isPl $ligne->isLgnPl();
  4795.         if ($isVl) {
  4796.             $typeArray[] = 1;
  4797.         }
  4798.         if ($isCl) {
  4799.             $typeArray[] = 4;
  4800.         }
  4801.         if ($isPl) {
  4802.             $typeArray[] = 2;
  4803.         }
  4804.         if (in_array($typeRdv$typeArray)) {
  4805.             $rendezvous->setRdvDateHeure(new Datetime($request->get('start')));
  4806.             $rendezvous->setLigne($ligne);
  4807.             $rendezvous->setRdvDateModification(new Datetime());
  4808.             $manager->persist($rendezvous);
  4809.             $manager->flush();
  4810.             return new Response('ok');
  4811.         }
  4812.         return new Response('ko');
  4813.     }
  4814.     /**
  4815.      * @Route("admin/blocage_drag_and_drop", name="blocage_drag_and_drop")
  4816.      */
  4817.     public function DragAndDropBlocage(Request $requestObjectManager $manager)
  4818.     {
  4819.         $allpermission $this->checkAllPermissionAdmin("blocage");
  4820.         if (!$allpermission || !$allpermission['ecrire']) {
  4821.             return new Response('cannot_move_blocage_not_right');
  4822.         }
  4823.         $blocageId $request->get('blocage_id');
  4824.         if (!$blocageId) {
  4825.             return new Response('cannot_move_blocage_not_specified');
  4826.         }
  4827.         $ligneBlocage $this->em->getrepository(LigneBlocage::class)->find($request->get('blocage_id'));
  4828.         $ligne $this->em->getrepository(Ligne::class)->find($request->get('ligneId'));
  4829.         $ligneBlocage->setBlcDebut(new Datetime($request->get('start')));
  4830.         $ligneBlocage->setBlcFin(new Datetime($request->get('end')));
  4831.         $ligneBlocage->setLigne($ligne);
  4832.         $manager->persist($ligneBlocage);
  4833.         $manager->flush();
  4834.         return new Response('ok');
  4835.     }
  4836.     /**
  4837.      * @Route("/admin/blocage_add", name="blocage_add")
  4838.      */
  4839.     public function AddBlocage(Request $requestObjectManager $manager)
  4840.     {
  4841.         $allpermission $this->checkAllPermissionAdmin("blocage");
  4842.         if (!$allpermission || !$allpermission['ecrire']) {
  4843.             return new Response('cannot_add_blocage_not_right');
  4844.         }
  4845.         $ligne $this->em->getrepository(Ligne::class)->find($request->get('ligne_id'));
  4846.         $ligneBlocageRecurrence = new LigneBlocageRecurrence;
  4847.         $from = new DateTime($request->get('dateDebutBlocage'));
  4848.         $to = new DateTime($request->get('dateFinBlocage'));
  4849.         $to $to->modify("+ 1 day");
  4850.         $interval DateInterval::createFromDateString('1 day');
  4851.         $days = new DatePeriod($from$interval$to);
  4852.         $creneauOccupe = array();
  4853.         $joursBlocage $request->get("joursBlocages");
  4854.         $joursBlocage[6] = "7";
  4855.         foreach ($days as $day) {
  4856.             if (in_array($day->format('N'), $joursBlocage)) {
  4857.                 $dateDebut $day->format('Y-m-d') . ' ' $request->get('hDebutBlocage');
  4858.                 $dateFin $day->format('Y-m-d') . ' ' $request->get('hFinBlocage');
  4859.                 // Récupération des rendez-vous ou blocage existants pour cette ligne et ce créneau
  4860.                 $rendezVousLigneExistants $this->em->getRepository(Rendezvous::class)->rendezVousExistByLigne($ligne$dateDebut$dateFin'');
  4861.                 $blocageLigneExistants $this->em->getRepository(LigneBlocage::class)->blocageExistByLigne($ligne$dateDebut$dateFin$request->get('blocage_id'));
  4862.                 // Si des rendez-vous ou blocage existent, renvoie un message d'erreur
  4863.                 if (count($rendezVousLigneExistants) > || count($blocageLigneExistants) > 0) {
  4864.                     $creneauOccupe[] = $dateDebut '->' $dateFin;
  4865.                 } else {
  4866.                     if ($request->get('blocage_id') !== '') {
  4867.                         $ligneBlocage $this->em->getrepository(LigneBlocage::class)->find($request->get('blocage_id'));
  4868.                         $ligneBlocageRecurrence $ligneBlocage->getRecurrence();
  4869.                     } else {
  4870.                         $ligneBlocage = new LigneBlocage;
  4871.                         $manager->persist($ligneBlocageRecurrence);
  4872.                     }
  4873.                     $ligneBlocage->setBlcDebut(new DateTime($dateDebut));
  4874.                     $ligneBlocage->setBlcFin(new DateTime($dateFin));
  4875.                     $ligneBlocage->setBlcCommentaire($request->get('commentaireBlocage'));
  4876.                     $ligneBlocage->setBlcBgColor($request->get('couleurBlocage'));
  4877.                     $ligneBlocage->setLigne($ligne);
  4878.                     $ligneBlocage->setRecurrence($ligneBlocageRecurrence);
  4879.                     $manager->persist($ligneBlocage);
  4880.                     $manager->flush();
  4881.                     if ($request->get('blocage_id') !== '') {
  4882.                         $this->apiController->sendAddBlcToAutoPlanning($ligneBlocage,false);
  4883.                     }else{
  4884.                         $this->apiController->sendAddBlcToAutoPlanning($ligneBlocage);
  4885.                     }
  4886.                     $creneauOccupe[] = 'ok';
  4887.                 }
  4888.             }
  4889.         }
  4890.         $manager->flush();
  4891.         return new JsonResponse($creneauOccupe);
  4892.     }
  4893.     /**
  4894.      * @Route("admin/blocage_remove", name="blocage_remove")
  4895.      */
  4896.     public function RemoveBlocage(Request $requestObjectManager $manager)
  4897.     {
  4898.         $allpermission $this->checkAllPermissionAdmin("blocage");
  4899.         if (!$allpermission || !$allpermission['supp']) {
  4900.             return new Response('cannot_supp_blocage_not_right');
  4901.         }
  4902.         if ($request->get('blocage_id')) {
  4903.             $ligneBlocage $this->em->getrepository(LigneBlocage::class)->find($request->get('blocage_id'));
  4904.             $manager->remove($ligneBlocage);
  4905.             if($ligneBlocage->getBlcAutoPlanning()){
  4906.                 $this->apiController->sendDeleteBlcToAutoPlanning($ligneBlocage);
  4907.             }
  4908.             $manager->flush();
  4909.             
  4910.         } else if ($request->get('recurrence_id')) {
  4911.             $lignesBlocage $this->em->getrepository(LigneBlocage::class)->findBy(['recurrence' => $request->get('recurrence_id')]);
  4912.             $ligneBlocageRecurrence $this->em->getrepository(LigneBlocageRecurrence::class)->find($request->get('recurrence_id'));
  4913.             foreach ($lignesBlocage as $ligneBlocage) {
  4914.                 $manager->remove($ligneBlocage);
  4915.                 if ($ligneBlocage->getBlcAutoPlanning()) {
  4916.                     $this->apiController->sendDeleteBlcToAutoPlanning($ligneBlocage);
  4917.                 }
  4918.                 
  4919.             }
  4920.             $manager->remove($ligneBlocageRecurrence);
  4921.             $manager->flush();
  4922.         }
  4923.       //  $manager->flush();
  4924.         return new Response('ok');
  4925.     }
  4926.     /**
  4927.      * @Route("/admin/rdv_recurrence_add", name="rdv_recurrence_add")
  4928.      */
  4929.     public function AddRdvRecurrence(Request $requestObjectManager $manager)
  4930.     {
  4931.         $permissionResult $this->checkPermissionAdmin("ecrire""calendrier");
  4932.         if ($permissionResult instanceof RedirectResponse) {
  4933.             return $permissionResult;
  4934.         }
  4935.         $ligne $this->em->getrepository(Ligne::class)->find($request->get('ligne_id'));
  4936.         $utilisateur $this->em->getrepository(Utilisateur::class)->find($request->get('utilisateurRecurrence'));
  4937.         $clientCompte $this->em->getrepository(ClientCompte::class)->find($request->get('clientCompteRecurrenceId'));
  4938.         if ($request->get('centre_type')) {
  4939.             $centreType $request->get('centre_type');
  4940.             $centre $this->em->getrepository(Centre::class)->findOneBy(['centre_type' => $centreType'centre_groupe' => $this->id]);
  4941.         } else {
  4942.             $centreType '';
  4943.             if ($clientCompte->isCliVl()) {
  4944.                 $centreType 1;
  4945.             } else if ($clientCompte->isCliPl()) {
  4946.                 $centreType 2;
  4947.             } else if ($clientCompte->isCliCl()) {
  4948.                 $centreType 4;
  4949.             } else {
  4950.                 return new JsonResponse(['error' => 'Une erreur est surveneue lors de l\'enregistrement.'], 400);
  4951.             }
  4952.             $centre $this->em->getrepository(Centre::class)->findOneBy(['centre_type' => $centreType'centre_groupe' => $this->id]);
  4953.         }
  4954.         $rendezVousRecurrence = new RendezVousRecurrence;
  4955.         $from = new DateTime($request->get('dateDebutRecurrence'));
  4956.         $to = new DateTime($request->get('dateFinRecurrence'));
  4957.         $to $to->modify("+ 1 day");
  4958.         $interval DateInterval::createFromDateString('1 day');
  4959.         $days = new DatePeriod($from$interval$to);
  4960.         $creneauOccupe = array();
  4961.         foreach ($days as $day) {
  4962.             if (in_array($day->format('N'), $request->get("joursRecurrences"))) {
  4963.                 $dateDebut $day->format('Y-m-d') . ' ' $request->get('hDebutRecurrence');
  4964.                 $dateFin $day->format('Y-m-d') . ' ' $request->get('hFinRecurrence');
  4965.                 $dateDebutInterval = new DateTime($day->format('Y-m-d') . ' ' $request->get('hDebutRecurrence'));
  4966.                 $dateFinInterval = new DateTime($day->format('Y-m-d') . ' ' $request->get('hFinRecurrence'));
  4967.                 $intervalInSeconds $dateFinInterval->getTimestamp() - $dateDebutInterval->getTimestamp();
  4968.                 $intervalInMinutes $intervalInSeconds 60;
  4969.                 // Récupération des rendez-vous ou blocage existants pour cette ligne et ce créneau
  4970.                 $rendezVousLigneExistants $this->em->getRepository(Rendezvous::class)->rendezVousExistByLigne($ligne$dateDebut$dateFin$request->get('rendezvous_id'));
  4971.                 $blocageLigneExistants $this->em->getRepository(LigneBlocage::class)->blocageExistByLigne($ligne$dateDebut$dateFin'');
  4972.                 // Si des rendez-vous ou blocage existent, renvoie un message d'erreur
  4973.                 if (count($rendezVousLigneExistants) > || count($blocageLigneExistants) > 0) {
  4974.                     $creneauOccupe[] = $dateDebut '->' $dateFin;
  4975.                 } else {
  4976.                     if ($request->get('rendezvous_id') !== '') {
  4977.                         $rendezVous $this->em->getrepository(Rendezvous::class)->find($request->get('rendezvous_id'));
  4978.                         $rendezVousRecurrence $rendezVous->getRecurrence();
  4979.                     } else {
  4980.                         $rendezVous = new Rendezvous;
  4981.                         $rendezVous->setTokenRendezVous(md5(uniqid()));
  4982.                         $rendezVous->setRdvDateCreation(new Datetime());
  4983.                     }
  4984.                     $rendezVous->setCentre($centre);
  4985.                     $rendezVous->setUtilisateur($utilisateur);
  4986.                     $rendezVous->setCentreType($centre->getCentreType());
  4987.                     $rendezVous->setLigne($ligne);
  4988.                     $rendezVous->setClientCompte($clientCompte);
  4989.                     $rendezVous->setRdvTarif(000);
  4990.                     $rendezVous->setRdvDateHeure(new DateTime($dateDebut));
  4991.                     $rendezVous->setRdvDuree($intervalInMinutes);
  4992.                     $rendezVous->setRdvCommentaire($request->get('commentaireRecurrence') ? $request->get('commentaireRecurrence') : null);
  4993.                     $rendezVous->setRdvColor($request->get('couleurRecurrence'));
  4994.                     $rendezVous->setRecurrence($rendezVousRecurrence $rendezVousRecurrence '');
  4995.                     $manager->persist($rendezVous);
  4996.                 }
  4997.             }
  4998.         }
  4999.         $manager->persist($rendezVousRecurrence);
  5000.         $manager->flush();
  5001.         return new JsonResponse($creneauOccupe);
  5002.     }
  5003.     /**
  5004.      * @Route("admin/rdv_recurrence_remove", name="rdv_recurrence_remove")
  5005.      */
  5006.     public function RemoveRdvRecurrence(Request $requestObjectManager $manager)
  5007.     {
  5008.         $permissionResult $this->checkPermissionAdmin("supp""calendrier");
  5009.         if ($permissionResult instanceof RedirectResponse) {
  5010.             return $permissionResult;
  5011.         }
  5012.         if ($request->get('rendezvous_id')) {
  5013.             $rendezvous $this->em->getrepository(Rendezvous::class)->find($request->get('rendezvous_id'));
  5014.             $rendezvous->getRecurrence();
  5015.             $manager->remove($rendezvous);
  5016.         } else if ($request->get('recurrence_id')) {
  5017.             $rendezvouses $this->em->getrepository(Rendezvous::class)->findBy(['recurrence' => $request->get('recurrence_id')]);
  5018.             $rendezvousRecurrence $this->em->getrepository(RendezVousRecurrence::class)->find($request->get('recurrence_id'));
  5019.             foreach ($rendezvouses as $rendezvous) {
  5020.                 $manager->remove($rendezvous);
  5021.             }
  5022.             $manager->remove($rendezvousRecurrence);
  5023.         }
  5024.         $manager->flush();
  5025.         return new Response('ok');
  5026.     }
  5027.     /**
  5028.      * @Route("admin/rdv_recurrence_remove_sms", name="rdv_recurrence_remove_sms")
  5029.      */
  5030.     public function RemoveRdvRecurrenceSms(Request $requestObjectManager $manager)
  5031.     {
  5032.         $permissionResult $this->checkPermissionAdmin("supp""calendrier");
  5033.         if ($permissionResult instanceof RedirectResponse) {
  5034.             return $permissionResult;
  5035.         }
  5036.         if ($request->get('rendezvous_id')) {
  5037.             $rendezvous $this->em->getrepository(Rendezvous::class)->find($request->get('rendezvous_id'));
  5038.             $rendezvous->getRecurrence();
  5039.             $manager->remove($rendezvous);
  5040.         } else if ($request->get('recurrence_id')) {
  5041.             $rendezvouses $this->em->getrepository(Rendezvous::class)->findBy(['recurrence' => $request->get('recurrence_id')]);
  5042.             $rendezvousRecurrence $this->em->getrepository(RendezVousRecurrence::class)->find($request->get('recurrence_id'));
  5043.             foreach ($rendezvouses as $rendezvous) {
  5044.                 $manager->remove($rendezvous);
  5045.             }
  5046.             $manager->remove($rendezvousRecurrence);
  5047.         }
  5048.         $this->apiController->EnvoiSmsRdvDelete($rendezvous$request->get('telephone'));
  5049.         $manager->flush();
  5050.         return new Response('ok');
  5051.     }
  5052.     /**
  5053.      * @Route("admin/rdv_recurrence_remove_email", name="rdv_recurrence_remove_email")
  5054.      */
  5055.     public function RemoveRdvRecurrenceConfEmail(Request $requestObjectManager $manager)
  5056.     {
  5057.         $permissionResult $this->checkPermissionAdmin("supp""calendrier");
  5058.         if ($permissionResult instanceof RedirectResponse) {
  5059.             return $permissionResult;
  5060.         }
  5061.         if ($request->get('rendezvous_id')) {
  5062.             $rendezvous $this->em->getrepository(Rendezvous::class)->find($request->get('rendezvous_id'));
  5063.             $rendezvous->getRecurrence();
  5064.             $manager->remove($rendezvous);
  5065.         } else if ($request->get('recurrence_id')) {
  5066.             $rendezvouses $this->em->getrepository(Rendezvous::class)->findBy(['recurrence' => $request->get('recurrence_id')]);
  5067.             $rendezvousRecurrence $this->em->getrepository(RendezVousRecurrence::class)->find($request->get('recurrence_id'));
  5068.             foreach ($rendezvouses as $rendezvous) {
  5069.                 $manager->remove($rendezvous);
  5070.             }
  5071.             $manager->remove($rendezvousRecurrence);
  5072.         }
  5073.         $return $this->apiController->envoi_email_confirmation_client($rendezvous);
  5074.         $manager->flush();
  5075.         return $return;
  5076.     }
  5077.     /**
  5078.      * @Route("admin/rdv_by_client", name="rdv_by_client")
  5079.      */
  5080.     public function findRdvByClientName(Request $request)
  5081.     {
  5082.         $permissionResult $this->checkPermissionAdmin("lire""calendrier");
  5083.         if ($permissionResult instanceof RedirectResponse) {
  5084.             return $permissionResult;
  5085.         }
  5086.         if ($request->get('startDate') || $request->get('endDate')) {
  5087.             $rendezvousClient $this->em->getrepository(Rendezvous::class)->findRendezvousByClientNameAndDate($this->id$request->get('name'), $request->get('startDate'), $request->get('endDate'));
  5088.         } else {
  5089.             $rendezvousClient $this->em->getrepository(Rendezvous::class)->findRendezvousByClientName($this->id$request->get('name'));
  5090.         }
  5091.         $data = [];
  5092.         foreach ($rendezvousClient as $rendezvous) {
  5093.             if ($rendezvous->getClientLibre() !== null) {
  5094.                 $name $rendezvous->getClientLibre()->getClNom();
  5095.                 $telephone $rendezvous->getClientLibre()->getClTelephone();
  5096.             } else {
  5097.                 if ($rendezvous->getClientCompte()->getCliNomSociete()) {
  5098.                     $name $rendezvous->getClientCompte()->getCliNom() . '(' $rendezvous->getClientCompte()->getCliNomSociete() . ')';
  5099.                 } else {
  5100.                     $name $rendezvous->getClientCompte()->getCliNom();
  5101.                 }
  5102.                 $telephone $rendezvous->getClientCompte()->getCliTelephone();
  5103.             }
  5104.             $rendezvousfacturation $this->em->getrepository(RendezVousFacturation::class)->findOneBy(['rendezvous' => $rendezvous->getId()]);
  5105.             if ($rendezvousfacturation) {
  5106.                 $etat_paiement 'payé';
  5107.                 $option_cv $rendezvousfacturation->isFpOptionCv();
  5108.                 $option_rdv_modifiable $rendezvousfacturation->isFpOptionModifiable();
  5109.                 $option_paiement_2x $rendezvousfacturation->isFpOptionPaiementMultiple();
  5110.             } else {
  5111.                 $etat_paiement 'non payé';
  5112.                 $option_cv 0;
  5113.                 $option_rdv_modifiable 0;
  5114.                 $option_paiement_2x 0;
  5115.             }
  5116.             /** @var RendezVousInfos $rendezVousInfo */
  5117.             foreach ($rendezvous->getRendezVousInfos() as $rendezVousInfo) {
  5118.                 $data[] = [
  5119.                     'date_rdv_pris' => $rendezvous->getRdvDateCreation()->format('d/m/Y H:i'),
  5120.                     'centre' => $rendezvous->getCentre()->getCtrNom(),
  5121.                     'name' => $name,
  5122.                     'telephone' => $telephone,
  5123.                     'vehicule' => $rendezVousInfo->getVehicule()->getMarque() ? $rendezVousInfo->getVehicule()->getMarque()->getMarqueLibele() : '' ' ' . ($rendezVousInfo->getVehicule()->getModele() ? $rendezVousInfo->getVehicule()->getModele()->getMdlLibele() : '') . ' (' $rendezVousInfo->getVehicule()->getRdvVhcImmatriculation() . ')',
  5124.                     'immat' => $rendezVousInfo->getVehicule()->getRdvVhcImmatriculation(),
  5125.                     'date_rdv' => $rendezvous->getRdvDateHeure()->format('d/m/Y H:i'),
  5126.                     'prix_tcc' => $rendezvous->getRdvTarif(),
  5127.                     'id' => $rendezvous->getId(),
  5128.                     'option_cv' => $option_cv,
  5129.                     'option_rdv_modifiable' => $option_rdv_modifiable,
  5130.                     'option_paiement_2x' => $option_paiement_2x,
  5131.                     'etat_paiement' => $etat_paiement,
  5132.                     'partenaire' => $rendezvous->getPartenaire() ? $rendezvous->getPartenaire()->getPaNom() : '',
  5133.                     'ligne' => $rendezvous->getLigne()->getlgnnom(),
  5134.                     'prestation' => $rendezVousInfo->getCentrePrestation()->getPstTypeVisite()->getTypVstLibele(),
  5135.                     'client_compte_id' => $rendezvous->getClientCompte() ? $rendezvous->getClientCompte()->getId() : '',
  5136.                 ];
  5137.             }
  5138.         }
  5139.         return $this->json($data);
  5140.         // foreach ($rendezvousClient as $rendezvous) {
  5141.         //     if ($rendezvous->getClientLibre() !== null ) {
  5142.         //                 $name = $rendezvous->getClientLibre()->getClNom();
  5143.         //            $telephone = $rendezvous->getClientLibre()->getClTelephone();
  5144.         //         } else {
  5145.         //             if ($rendezvous->getClientCompte()->getCliNomSociete()) {
  5146.         //                 $name = $rendezvous->getClientCompte()->getCliNom() . '(' . $rendezvous->getClientCompte()->getCliNomSociete() .')' ;
  5147.         //             } else {
  5148.         //                 $name = $rendezvous->getClientCompte()->getCliNom();
  5149.         //             }
  5150.         //             $telephone = $rendezvous->getClientCompte()->getCliTelephone();
  5151.         //         }
  5152.         //         foreach ($rendezvous->getRendezVousInfos() as $rendezVousInfo) {
  5153.         //                 $data[] = [
  5154.         //                     'name' => $name,
  5155.         //                     'telephone' => $telephone,
  5156.         //                     'immat' => $rendezVousInfo->getVehicule()->getRdvVhcImmatriculation(),
  5157.         //                     'date_rdv' => $rendezvous->getRdvDateHeure()->format('d/m/Y H:i'),
  5158.         //                     'ligne' => $rendezvous->getLigne()->getlgnnom(),
  5159.         //                     'prestation' => $rendezVousInfo->getCentrePrestation()->getPstTypeVisite()->getTypVstLibele(),
  5160.         //                     'client_compte_id' => $rendezvous->getClientCompte() ? $rendezvous->getClientCompte()->getId() : ''
  5161.         //                 ];
  5162.         //         }
  5163.         //     }
  5164.         // return $this->json($data);
  5165.     }
  5166.     /**
  5167.      * @Route("admin/get_promotion", name="get_promotion")
  5168.      */
  5169.     public function getPromotion()
  5170.     {
  5171.         $permissionResult $this->checkPermissionAdmin("lire""calendrier");
  5172.         if ($permissionResult instanceof RedirectResponse) {
  5173.             return $permissionResult;
  5174.         }
  5175.         $promotions $this->em->getRepository(Promotion::class)->findby(['centre_groupe' => $this->id]);
  5176.         $arrayPromotion = array();
  5177.         foreach ($promotions as $promotion) {
  5178.             $arrayPromotion[] = [
  5179.                 'promotion_id' => $promotion->getId(),
  5180.                 'promotion_name' => $promotion->getPrmNom(),
  5181.             ];
  5182.         }
  5183.         return new JsonResponse($arrayPromotion);
  5184.     }
  5185.     /**
  5186.      * @Route("admin/get_promotion_recurrence_info", name="get_promotion_recurrence_info")
  5187.      */
  5188.     public function getPromotionRecurrenceInfo(Request $request)
  5189.     {
  5190.         $permissionResult $this->checkPermissionAdmin("lire""calendrier");
  5191.         if ($permissionResult instanceof RedirectResponse) {
  5192.             return $permissionResult;
  5193.         }
  5194.         $creneaux $this->em->getrepository(PromotionCreneau::class)->findBy(['recurrence' => $request->get('recurrence_id')]);
  5195.         if (empty($creneaux)) {
  5196.             return new JsonResponse(null404);
  5197.         }
  5198.         $dates array_map(fn($c) => $c->getPrmCreDebut(), $creneaux);
  5199.         $dateDebut min($dates)->format('Y-m-d');
  5200.         $dateFin max($dates)->format('Y-m-d');
  5201.         $jours array_values(array_unique(array_map(function ($c) {
  5202.             $n = (int) $c->getPrmCreDebut()->format('N');
  5203.             return $n === $n;
  5204.         }, $creneaux)));
  5205.         $first $creneaux[0];
  5206.         return new JsonResponse([
  5207.             'date_debut' => $dateDebut,
  5208.             'date_fin'   => $dateFin,
  5209.             'heure_debut' => $first->getPrmCreDebut()->format('H:i'),
  5210.             'heure_fin'   => $first->getPrmCreFin()->format('H:i'),
  5211.             'jours'       => $jours,
  5212.         ]);
  5213.     }
  5214.     /**
  5215.      * @Route("/admin/promotion_creneau_add", name="promotion_creneau_add")
  5216.      */
  5217.     public function AddPromotioncCreneau(Request $requestObjectManager $manager)
  5218.     {
  5219.         $permissionResult $this->checkPermissionAdmin("ecrire""calendrier");
  5220.         if ($permissionResult instanceof RedirectResponse) {
  5221.             return $permissionResult;
  5222.         }
  5223.         $promotion $this->em->getrepository(Promotion::class)->find($request->get('promotion_id'));
  5224.         $promotionCreneauId $request->get('promotion_creneau_id');
  5225.         if ($promotionCreneauId !== '' && $promotionCreneauId !== null) {
  5226.             // Modification : ne touche pas les créneaux passés, met à jour/recrée uniquement les futurs
  5227.             $promotionCreneau $this->em->getrepository(PromotionCreneau::class)->find($promotionCreneauId);
  5228.             $promotionRecurrence $promotionCreneau->getRecurrence();
  5229.             $today = new DateTime('today');
  5230.             $allCreneaux $promotionRecurrence
  5231.                 $this->em->getrepository(PromotionCreneau::class)->findBy(['recurrence' => $promotionRecurrence])
  5232.                 : [$promotionCreneau];
  5233.             $from max(new DateTime($request->get('dateDebutPromotion')), $today);
  5234.             $to = (new DateTime($request->get('dateFinPromotion')))->modify('+ 1 day');
  5235.             $newDates = [];
  5236.             foreach (new DatePeriod($fromDateInterval::createFromDateString('1 day'), $to) as $day) {
  5237.                 if (in_array($day->format('N'), $request->get('joursRecurrences'))) {
  5238.                     $newDates[$day->format('Y-m-d')] = true;
  5239.                 }
  5240.             }
  5241.             $existingFutureByDate = [];
  5242.             foreach ($allCreneaux as $creneau) {
  5243.                 if ($creneau->getPrmCreDebut() >= $today) {
  5244.                     $existingFutureByDate[$creneau->getPrmCreDebut()->format('Y-m-d')] = $creneau;
  5245.                 }
  5246.             }
  5247.             foreach ($existingFutureByDate as $date => $creneau) {
  5248.                 if (isset($newDates[$date])) {
  5249.                     $creneau->setPromotion($promotion);
  5250.                     $creneau->setPrmCreDebut(new DateTime($date ' ' $request->get('hDebutPromotion')));
  5251.                     $creneau->setPrmCreFin(new DateTime($date ' ' $request->get('hFinPromotion')));
  5252.                     $creneau->setPrmCreDyn1($request->get('addPromoDynHeu1') ?: null);
  5253.                     $creneau->setPrmCreDyn2($request->get('addPromoDynHeu2') ?: null);
  5254.                     $creneau->setPrmCreDyn3($request->get('addPromoDynHeu3') ?: null);
  5255.                     $creneau->setPrmCrePrixDyn1($request->get('addPromoDynPrix1') ?: null);
  5256.                     $creneau->setPrmCrePrixDyn2($request->get('addPromoDynPrix2') ?: null);
  5257.                     $creneau->setPrmCrePrixDyn3($request->get('addPromoDynPrix3') ?: null);
  5258.                     $manager->persist($creneau);
  5259.                 } else {
  5260.                     $manager->remove($creneau);
  5261.                 }
  5262.             }
  5263.             foreach ($newDates as $date => $_) {
  5264.                 if (!isset($existingFutureByDate[$date])) {
  5265.                     $newCreneau = new PromotionCreneau;
  5266.                     $newCreneau->setPromotion($promotion);
  5267.                     $newCreneau->setRecurrence($promotionRecurrence);
  5268.                     $newCreneau->setPrmCreDebut(new DateTime($date ' ' $request->get('hDebutPromotion')));
  5269.                     $newCreneau->setPrmCreFin(new DateTime($date ' ' $request->get('hFinPromotion')));
  5270.                     $newCreneau->setPrmCreDyn1($request->get('addPromoDynHeu1') ?: null);
  5271.                     $newCreneau->setPrmCreDyn2($request->get('addPromoDynHeu2') ?: null);
  5272.                     $newCreneau->setPrmCreDyn3($request->get('addPromoDynHeu3') ?: null);
  5273.                     $newCreneau->setPrmCrePrixDyn1($request->get('addPromoDynPrix1') ?: null);
  5274.                     $newCreneau->setPrmCrePrixDyn2($request->get('addPromoDynPrix2') ?: null);
  5275.                     $newCreneau->setPrmCrePrixDyn3($request->get('addPromoDynPrix3') ?: null);
  5276.                     $manager->persist($newCreneau);
  5277.                 }
  5278.             }
  5279.             if ($promotionRecurrence) {
  5280.                 $manager->persist($promotionRecurrence);
  5281.             }
  5282.         } else {
  5283.             // Création : génère un créneau par jour correspondant dans la plage
  5284.             $promotionRecurrence = new PromotionRecurrence;
  5285.             $from = new DateTime($request->get('dateDebutPromotion'));
  5286.             $to = (new DateTime($request->get('dateFinPromotion')))->modify('+ 1 day');
  5287.             $days = new DatePeriod($fromDateInterval::createFromDateString('1 day'), $to);
  5288.             foreach ($days as $day) {
  5289.                 if (in_array($day->format('N'), $request->get('joursRecurrences'))) {
  5290.                     $dateDebut $day->format('Y-m-d') . ' ' $request->get('hDebutPromotion');
  5291.                     $dateFin $day->format('Y-m-d') . ' ' $request->get('hFinPromotion');
  5292.                     $promotionCreneau = new PromotionCreneau;
  5293.                     $promotionCreneau->setPromotion($promotion);
  5294.                     $promotionCreneau->setRecurrence($promotionRecurrence);
  5295.                     $promotionCreneau->setPrmCreDebut(new DateTime($dateDebut));
  5296.                     $promotionCreneau->setPrmCreFin(new DateTime($dateFin));
  5297.                     $promotionCreneau->setPrmCreDyn1($request->get('addPromoDynHeu1') ?: null);
  5298.                     $promotionCreneau->setPrmCreDyn2($request->get('addPromoDynHeu2') ?: null);
  5299.                     $promotionCreneau->setPrmCreDyn3($request->get('addPromoDynHeu3') ?: null);
  5300.                     $promotionCreneau->setPrmCrePrixDyn1($request->get('addPromoDynPrix1') ?: null);
  5301.                     $promotionCreneau->setPrmCrePrixDyn2($request->get('addPromoDynPrix2') ?: null);
  5302.                     $promotionCreneau->setPrmCrePrixDyn3($request->get('addPromoDynPrix3') ?: null);
  5303.                     $manager->persist($promotionCreneau);
  5304.                 }
  5305.             }
  5306.             $manager->persist($promotionRecurrence);
  5307.         }
  5308.         $manager->flush();
  5309.         return new JsonResponse($promotionRecurrence);
  5310.     }
  5311.     /**
  5312.      * @Route("admin/promotion_creneau_remove", name="promotion_creneau_remove")
  5313.      */
  5314.     public function RemovePromotionCreneau(Request $requestObjectManager $manager)
  5315.     {
  5316.         $permissionResult $this->checkPermissionAdmin("supp""calendrier");
  5317.         if ($permissionResult instanceof RedirectResponse) {
  5318.             return $permissionResult;
  5319.         }
  5320.         if ($request->get('promotion_creneau_id')) {
  5321.             $promotionCreneau $this->em->getrepository(PromotionCreneau::class)->find($request->get('promotion_creneau_id'));
  5322.             $manager->remove($promotionCreneau);
  5323.         } else if ($request->get('promotion_recurrence_id')) {
  5324.             $promotionCreneaus $this->em->getrepository(PromotionCreneau::class)->findBy(['recurrence' => $request->get('promotion_recurrence_id')]);
  5325.             $promotionRecurrence $this->em->getrepository(PromotionRecurrence::class)->find($request->get('promotion_recurrence_id'));
  5326.             foreach ($promotionCreneaus as $promotionCreneau) {
  5327.                 $manager->remove($promotionCreneau);
  5328.             }
  5329.             $manager->remove($promotionRecurrence);
  5330.         }
  5331.         $manager->flush();
  5332.         return new Response('ok');
  5333.     }
  5334.     /**
  5335.      * @Route("admin/promotion_creneau_drag_and_drop", name="promotion_creneau_drag_and_drop")
  5336.      */
  5337.     public function DragAndDropPromotionCreneau(Request $requestObjectManager $manager)
  5338.     {
  5339.         $permissionResult $this->checkPermissionAdmin("ecrire""calendrier");
  5340.         if ($permissionResult instanceof RedirectResponse) {
  5341.             return $permissionResult;
  5342.         }
  5343.         $promotionCreneau $this->em->getrepository(PromotionCreneau::class)->find($request->get('promotion_creneau_id'));
  5344.         $promotionCreneau->setPrmCreDebut(new Datetime($request->get('start')));
  5345.         $promotionCreneau->setPrmCreFin(new Datetime($request->get('end')));
  5346.         $manager->persist($promotionCreneau);
  5347.         $manager->flush();
  5348.         return new Response('ok');
  5349.     }
  5350.     /**
  5351.      * @Route("admin/rdv_rappel_sms", name="rdv_rappel_sms")
  5352.      */
  5353.     public function RdvRappelSms(Request $request)
  5354.     {
  5355.         $permissionResult $this->checkPermissionAdmin("ecrire""calendrier");
  5356.         if ($permissionResult instanceof RedirectResponse) {
  5357.             return $permissionResult;
  5358.         }
  5359.         $rendezvous $this->em->getrepository(Rendezvous::class)->find($request->get('rendezvous_id'));
  5360.         if (empty($request->get('telephone'))) {
  5361.             return new JsonResponse(['error' => 'Aucun numéro de téléphone est affilié à ce rdv.'], 400);
  5362.         }
  5363.         $this->apiController->EnvoiSmsRdvRappel($rendezvous$request->get('telephone'));
  5364.         return new Response('ok');
  5365.     }
  5366.     /**
  5367.      * @Route("admin/rdv_rappel_email", name="rdv_rappel_email")
  5368.      */
  5369.     public function RdvRappelEmail(Request $request)
  5370.     {
  5371.         $permissionResult $this->checkPermissionAdmin("ecrire""calendrier");
  5372.         if ($permissionResult instanceof RedirectResponse) {
  5373.             return $permissionResult;
  5374.         }
  5375.         $rendezvous $this->em->getrepository(Rendezvous::class)->find($request->get('rendezvous_id'));
  5376.         $return $this->apiController->envoi_email_confirmation_client($rendezvous);
  5377.         return $return;
  5378.     }
  5379.     /**
  5380.      * @Route("admin/rdv_rappel_email_sms", name="rdv_rappel_email_sms")
  5381.      */
  5382.     public function RdvRappelEmailSms(Request $request)
  5383.     {
  5384.         $permissionResult $this->checkPermissionAdmin("ecrire""calendrier");
  5385.         if ($permissionResult instanceof RedirectResponse) {
  5386.             return $permissionResult;
  5387.         }
  5388.         $rendezvous $this->em->getrepository(Rendezvous::class)->find($request->get('rendezvous_id'));
  5389.         $return $this->apiController->envoi_email_confirmation_client($rendezvous);
  5390.         if ($return->getStatusCode() != 200) {
  5391.             $errorData json_decode($return->getContent(), true);
  5392.             if (empty($request->get('telephone'))) {
  5393.                 return new JsonResponse(['error' => 'Aucun numéro de téléphone et email est affilié à ce rdv.'], 400);
  5394.             } else {
  5395.                 $this->apiController->EnvoiSmsRdvRappel($rendezvous$request->get('telephone'));
  5396.                 return new JsonResponse(['error' => 'SMS envoyé mais aucun email est affilié à ce rdv.'], 400);
  5397.             }
  5398.             return new JsonResponse(['error' => $errorData['error']], $return->getStatusCode());
  5399.         }
  5400.         if (empty($request->get('telephone'))) {
  5401.             return new JsonResponse(['error' => 'Email envoyé mais aucun numéro de téléphone est affilié à ce rdv.'], 400);
  5402.         }
  5403.         $this->apiController->EnvoiSmsRdvRappel($rendezvous$request->get('telephone'));
  5404.         return new Response('ok');
  5405.     }
  5406.     /**
  5407.      * @Route("admin/rdv_avis_google_sms", name="rdv_avis_google_sms")
  5408.      */
  5409.     public function RdvAvisGoogleSms(Request $request)
  5410.     {
  5411.         $permissionResult $this->checkPermissionAdmin("ecrire""calendrier");
  5412.         if ($permissionResult instanceof RedirectResponse) {
  5413.             return $permissionResult;
  5414.         }
  5415.         $rendezvous $this->em->getRepository(Rendezvous::class)->find($request->get('rendezvous_id'));
  5416.         if (!$rendezvous) {
  5417.             return new JsonResponse(['error' => 'Rendez-vous introuvable.'], 404);
  5418.         }
  5419.         $telephone $request->get('telephone');
  5420.         if (empty($telephone)) {
  5421.             return new JsonResponse(['error' => 'Aucun numéro de téléphone affilié à ce rdv.'], 400);
  5422.         }
  5423.         try {
  5424.             $this->apiController->EnvoiSmsAvisGoogleCommand($rendezvous$telephone);
  5425.         } catch (\Throwable $e) {
  5426.             return new JsonResponse(['error' => $e->getMessage()], 400);
  5427.         }
  5428.         return new Response('ok');
  5429.     }
  5430.     /**
  5431.      * @Route("admin/rdv_avis_google_email", name="rdv_avis_google_email")
  5432.      */
  5433.     public function RdvAvisGoogleEmail(Request $request)
  5434.     {
  5435.         $permissionResult $this->checkPermissionAdmin("ecrire""calendrier");
  5436.         if ($permissionResult instanceof RedirectResponse) {
  5437.             return $permissionResult;
  5438.         }
  5439.         $rendezvous $this->em->getRepository(Rendezvous::class)->find($request->get('rendezvous_id'));
  5440.         if (!$rendezvous) {
  5441.             return new JsonResponse(['error' => 'Rendez-vous introuvable.'], 404);
  5442.         }
  5443.         try {
  5444.             $result $this->apiController->EnvoiEmailAvisGoogle($rendezvous);
  5445.             if (!$result) {
  5446.                 return new JsonResponse(['error' => 'Aucune addresse mail affilié à ce rdv.'], 400);
  5447.             }
  5448.         } catch (\Throwable $e) {
  5449.             return new JsonResponse(['error' => $e->getMessage()], 400);
  5450.         }
  5451.         return new Response('ok');
  5452.     }
  5453.     /**
  5454.      * @Route("admin/client_search_name", name="client_search_name", methods={"GET"})
  5455.      */
  5456.     public function searchClientName(Request $request)
  5457.     {
  5458.         $permissionResult $this->checkPermissionAdmin("lire""calendrier");
  5459.         if ($permissionResult instanceof RedirectResponse) {
  5460.             return $permissionResult;
  5461.         }
  5462.         $name $request->get('query');
  5463.         $centreType $request->get('centreType');
  5464.         if (!$centreType) {
  5465.             return new JsonResponse([]);
  5466.         }
  5467.         if (strlen($name) < 3) {
  5468.             return new JsonResponse([]);
  5469.         }
  5470.         $clientsRdv $this->em->getrepository(Rendezvous::class)->findByCentregoupeidAndNameLike($this->id$name$centreType);
  5471.         return new JsonResponse($clientsRdv);
  5472.     }
  5473.     /**
  5474.      * @Route("admin/client_search_phone", name="client_search_phone", methods={"GET"})
  5475.      */
  5476.     public function searchClientPhone(Request $request)
  5477.     {
  5478.         $permissionResult $this->checkPermissionAdmin("lire""calendrier");
  5479.         if ($permissionResult instanceof RedirectResponse) {
  5480.             return $permissionResult;
  5481.         }
  5482.         $telephone $request->query->get('query');
  5483.         $centreType $request->get('centreType');
  5484.         if (!$centreType) {
  5485.             return new JsonResponse([]);
  5486.         }
  5487.         if (strlen($telephone) < 4) {
  5488.             return new JsonResponse([]);
  5489.         }
  5490.         $clientsRdv $this->em->getrepository(Rendezvous::class)->findByCentregoupeidAndPhoneLike($this->id$telephone$centreType);
  5491.         return new JsonResponse($clientsRdv);
  5492.     }
  5493.     /**
  5494.      * @Route("admin/client_search_immat", name="client_search_immat", methods={"GET"})
  5495.      */
  5496.     public function searchClientImmat(Request $request)
  5497.     {
  5498.         $permissionResult $this->checkPermissionAdmin("lire""calendrier");
  5499.         if ($permissionResult instanceof RedirectResponse) {
  5500.             return $permissionResult;
  5501.         }
  5502.         $immat $request->query->get('query');
  5503.         if (strlen($immat) < 2) {
  5504.             return new JsonResponse([]);
  5505.         }
  5506.         $clientsRdv $this->em->getrepository(Rendezvous::class)->findByCentregoupeidAndImmatLike($this->id$immat);
  5507.         return new JsonResponse($clientsRdv);
  5508.     }
  5509. // Gestion des Fonctions ----------------------------------------------------------
  5510.     /**
  5511.      * @Route("/admin/fonction", name="fonction")
  5512.      */
  5513.     public function Fonction(Request $requestPaginatorInterface $paginator): Response
  5514.     {
  5515.         $allpermission $this->checkAllPermissionAdmin("fonction");
  5516.         if (!$allpermission || !$allpermission['lire']) {
  5517.             $this->addFlash('error''Impossible, vous n\'avez pas accés à cette page');
  5518.             return $this->redirectToRoute('admin_erreur');
  5519.         }
  5520.         $data_fonction $this->cache->get('fonction' $this->id, function () {
  5521.             $data_fonction $this->em->getrepository(CentreFonction::class)->findBy(['CentreGroupe' => $this->id]);
  5522.             return $data_fonction;
  5523.         });
  5524.         $data_page $this->cache->get('page' $this->id, function () {
  5525.             $data_page $this->em->getrepository(Page::class)->findAll();
  5526.             return $data_page;
  5527.         });
  5528.         $fonctions $paginator->paginate(
  5529.             $data_fonction// Requête contenant les données à paginer (ici nos fonctions)
  5530.             $request->query->getInt('page'1), // Numéro de la page en cours, passé dans l'URL, 1 si aucune page
  5531.             10 // Nombre de résultats par page
  5532.         );
  5533.         return $this->render('admin/fonction_view.html.twig', [
  5534.             'fonctions' => $fonctions,
  5535.             'pages' => $data_page,
  5536.             'allpermission' => $allpermission,
  5537.         ]);
  5538.     }
  5539.     /**
  5540.      * @Route("/admin/fonction_add", name="fonction_add")
  5541.      */
  5542.     public function AddFonction(Request $requestObjectManager $manager)
  5543.     {
  5544.         $permissionResult $this->checkPermissionAdmin("ecrire""fonction");
  5545.         if ($permissionResult instanceof RedirectResponse) {
  5546.             return $permissionResult;
  5547.         }
  5548.         $centre_groupe $this->em->getrepository(CentreGroupe::class)->find($this->id);
  5549.         $centre_fonction = new CentreFonction();
  5550.         $centre_fonction->setCentreGroupe($centre_groupe);
  5551.         $centre_fonction->setFctNom($request->get('nom'));
  5552.         $manager->persist($centre_fonction);
  5553.         // Récupérez toutes les pages
  5554.         $data_page $this->em->getRepository(Page::class)->findAll();
  5555.         foreach ($data_page as $page) {
  5556.             $lire $request->get('Lire(' $page->getPgeRoute() . ')') ? true false;
  5557.             $ecrire $request->get('ecrire(' $page->getPgeRoute() . ')') ? true false;
  5558.             $suppression $request->get('supp(' $page->getPgeRoute() . ')') ? true false;
  5559.             if ($lire || $ecrire || $suppression) { // Si l'un des droits est cochée pour cette page
  5560.                 $droit = new Droit();
  5561.                 // $droit->setDrtDroit();
  5562.                 $droit->setDrtLire($lire);
  5563.                 $droit->setDrtEcrire($ecrire);
  5564.                 $droit->setDrtSuppression($suppression);
  5565.                 $droit->setDrtPage($page);
  5566.                 $droit->setDrtFonction($centre_fonction);
  5567.                 $manager->persist($droit);
  5568.             }
  5569.         }
  5570.         $manager->flush();
  5571.         $this->cache->delete('fonction' $this->id);
  5572.         return $this->redirect($request->headers->get('referer'));
  5573.     }
  5574.     /**
  5575.      * @Route("/admin/fonction_delete/{id}", name="fonction_delete")
  5576.      */
  5577.     public function deleteFonction(CentreFonction $centreFonctionObjectManager $manager)
  5578.     {
  5579.         $permissionResult $this->checkPermissionAdmin("supp""fonction");
  5580.         if ($permissionResult instanceof RedirectResponse) {
  5581.             return $permissionResult;
  5582.         }
  5583.         if ($centreFonction->getCentreGroupe()->getId() !== $this->id) {
  5584.             return new Response('cannot_delete_fonction_another_center');
  5585.         }
  5586.         // Supprimer l'entité
  5587.         $manager->remove($centreFonction);
  5588.         $manager->flush();
  5589.         $this->cache->delete('fonction' $this->id);
  5590.         // Rediriger l'utilisateur vers le type vehicule
  5591.         return new Response('ok');
  5592.     }
  5593.     /**
  5594.      * @Route("/admin/fonction_update/{id}", name="fonction_update")
  5595.      */
  5596.     public function updateFonction(CentreFonction $centre_fonctionRequest $requestObjectManager $managerSessionInterface $session)
  5597.     {
  5598.         $permissionResult $this->checkPermissionAdmin("ecrire""fonction");
  5599.         if ($permissionResult instanceof RedirectResponse) {
  5600.             return $permissionResult;
  5601.         }
  5602.         if ($centre_fonction->getCentreGroupe()->getId() !== $this->id) {
  5603.             $this->addFlash('error'"Impossible de mettre à jour le type de visite car il n'est pas liée à votre centre.");
  5604.             return $this->redirectToRoute('fonction');
  5605.         }
  5606.         $centre_fonction->setFctNom($request->get('nom'));
  5607.         // permet de verifier si il y a une nouvelle page et si oui alors creer un nouveau droit
  5608.         $data_page $this->em->getRepository(Page::class)->findAll();
  5609.         $existingDroits $centre_fonction->getDroits();
  5610.         $pagesWithDroitsIds = [];
  5611.         foreach ($existingDroits as $droit) {
  5612.             $pagesWithDroitsIds[] = $droit->getDrtPage()->getId();
  5613.         }
  5614.         $allPageIds = [];
  5615.         foreach ($data_page as $page) {
  5616.             $allPageIds[] = $page->getId();
  5617.         }
  5618.         $pagesWithoutDroitsIds array_diff($allPageIds$pagesWithDroitsIds);
  5619.         // Convertir les IDs des pages sans droits en objets Page
  5620.         $pagesWithoutDroits = [];
  5621.         foreach ($data_page as $page) {
  5622.             if (in_array($page->getId(), $pagesWithoutDroitsIds)) {
  5623.                 $pagesWithoutDroits[] = $page;
  5624.             }
  5625.         }
  5626.         foreach ($existingDroits as $droit) {
  5627.             $page $droit->getDrtPage();
  5628.             $droit->setDrtLire($request->get('Lire(' $page->getPgeRoute() . ')') ? true false);
  5629.             $droit->setDrtEcrire($request->get('ecrire(' $page->getPgeRoute() . ')') ? true false);
  5630.             $droit->setDrtSuppression($request->get('supp(' $page->getPgeRoute() . ')') ? true false);
  5631.             $manager->persist($droit);
  5632.         }
  5633.         foreach ($pagesWithoutDroits as $page) {
  5634.             $newDroit = new Droit();
  5635.             $newDroit->setDrtPage($page);
  5636.             $newDroit->setDrtLire($request->get('Lire(' $page->getPgeRoute() . ')') ? true false);
  5637.             $newDroit->setDrtEcrire($request->get('ecrire(' $page->getPgeRoute() . ')') ? true false);
  5638.             $newDroit->setDrtSuppression($request->get('supp(' $page->getPgeRoute() . ')') ? true false);
  5639.             $centre_fonction->addDroit($newDroit);
  5640.             $manager->persist($newDroit);
  5641.         }
  5642.         $manager->persist($centre_fonction);
  5643.         $manager->flush();
  5644.         $user $this->getUser();
  5645.         $droits $this->accessService->getRightsForUserOnPage($user$this->id);
  5646.         $session->set('droits' $user->getId(), $droits);
  5647.         $this->cache->delete('fonction' $this->id);
  5648.         return $this->redirectToRoute('fonction');
  5649.     }
  5650.     /**
  5651.      * @Route("/admin/fonction_droits/{id}", name="get_fonction_droits")
  5652.      */
  5653.     public function getFonctionDroits(CentreFonction $centre_fonction)
  5654.     {
  5655.         $droits = [];
  5656.         foreach ($centre_fonction->getDroits() as $droit) {
  5657.             $droits[] = [
  5658.                 'page' => $droit->getDrtPage()->getPgeRoute(),
  5659.                 'lire' => $droit->isDrtLire(),
  5660.                 'ecrire' => $droit->isDrtEcrire(),
  5661.                 'supp' => $droit->isDrtSuppression(),
  5662.             ];
  5663.         }
  5664.         return new JsonResponse($droits);
  5665.     }
  5666.     /**
  5667.      * @Route("/vide_cache_centre_groupe/{id}", name="vide_cache_centre_groupe")
  5668.      */
  5669.     public function vide_cache_centre_groupe($id '')
  5670.     {
  5671.         //$CentreGroupe = $request->get('id');
  5672.         if ($id == '') {
  5673.             $id $this->id;
  5674.         }
  5675.         $this->cache->delete('Centre_groupe_' $id);
  5676.         $CentreGroupe $this->cache->get('Centre_groupe_' $id, function (ItemInterface $item) use ($id) {
  5677.             $item->expiresAfter(DateInterval::createFromDateString('12 hour'));
  5678.         
  5679.             $query $this->em->createQueryBuilder()
  5680.                 ->select('cg')
  5681.                 ->from(CentreGroupe::class, 'cg')
  5682.                 ->where('cg.id = :id')
  5683.                 ->setParameter('id'$id)
  5684.                 ->getQuery();
  5685.         
  5686.             $CentreGroupe $query->getSingleResult();
  5687.         
  5688.             if ($CentreGroupe instanceof Proxy && !$CentreGroupe->__isInitialized()) {
  5689.                 $this->em->initializeObject($CentreGroupe);
  5690.             }
  5691.         
  5692.             return $CentreGroupe;
  5693.         });
  5694.         $this->cache->delete('ParametreCentre_groupe_' $id);
  5695.         $ParametreCentreGroupe $this->cache->get('ParametreCentre_groupe_' $id, function (ItemInterface $item) use ($id) {
  5696.             $item->expiresAfter(DateInterval::createFromDateString('12 hour'));
  5697.             $ParametreCentreGroupe $this->em->getrepository(ParametreCentreGroupe::class)->findOneBy(['centre_groupe' => $id]);
  5698.             return $ParametreCentreGroupe;
  5699.         });
  5700.         $this->cache->delete('CentrePrestation_centre_groupe_' $id);
  5701.         $Prestations $this->cache->get('CentrePrestation_centre_groupe_'.$id, function (ItemInterface $item) use ($id) {
  5702.             $item->expiresAfter(DateInterval::createFromDateString('12 hour'));
  5703.             $Prestations $this->em->getrepository(CentrePrestation::class)->findBy(
  5704.                 array('centre_groupe' => $id'pst_actif' => true'pst_afficher' => true),
  5705.                 array('pst_ordre' => 'asc')
  5706.             );
  5707.             return $Prestations;
  5708.         });
  5709.         $this->cache->delete('centre_groupe' $id);
  5710.         $data_centre_groupes $this->cache->get('centre_groupe' $id, function () use ($id) {
  5711.             return $this->em->getrepository(CentreGroupe::class)->find($id);
  5712.         });
  5713.         if ($data_centre_groupes->getCgGerant()) {
  5714.             $this->cache->delete('info_sommaire_' $data_centre_groupes->getCgGerant()->getId());
  5715.         }
  5716.         //  $this->cache->delete('CentrePrestation_centre_groupe_' . $id);
  5717.         foreach ($this->em->getRepository(Centre::class)->findBy(['centre_groupe' => $id]) as $key => $centre) {
  5718.             $centre_id $centre->getId();
  5719.             $this->cache->delete('Centre_' $centre_id);
  5720.             $data_centre $this->cache->get('Centre_' $centre->getId(), function () use ($centre_id) {
  5721.                 return $this->em->getRepository(Centre::class)->find($centre_id);
  5722.             });
  5723.             $this->cache->delete('Horaire_' $centre_id);
  5724.             $data_Horaire_centre $this->cache->get('Horaire_' $centre_id, function () use ($centre_id) {
  5725.                 return $this->em->getRepository(CentreHoraire::class)->getHoraires($centre_id);
  5726.             });
  5727.             $this->cache->delete('Ligne_' $id '_' $centre->getCentreType()->getId());
  5728.             $data_Ligne $this->cache->get('Ligne_' $id '_' $centre->getCentreType()->getId(), function () use ($id$centre) {
  5729.                 return $this->em->getRepository(Ligne::class)->findLigneAndHoraireByTypeCentre($id$centre->getCentreType()->getId());
  5730.             });
  5731.         }
  5732.         $this->cache->delete('prestation' $id);
  5733.         $data_prestations $this->cache->get('prestation' $id, function () use ($id) {
  5734.             return $this->em->getrepository(CentrePrestation::class)->findByCentreGroupe($id);
  5735.         });
  5736.         $this->cache->delete('prestation_actif' $id);
  5737.         $data_prestations $this->cache->get('prestation_actif' $id, function () use ($id) {
  5738.             return $this->em->getrepository(CentrePrestation::class)->findActifByCentreGroupe($id);
  5739.         });
  5740.         $data_prestations =  $this->em->getrepository(CentrePrestation::class)->findByCentreGroupe($id);
  5741.         /** @var CentrePrestation $prestation */
  5742.         foreach ($data_prestations as $prestation) {
  5743.             $this->cache->delete('Prestation' $prestation->getId());
  5744.             $data_prestations $this->cache->get('Prestation' $prestation->getId(), function () use ($prestation) {
  5745.                 return $this->em->getrepository(CentrePrestation::class)->find($prestation->getId());
  5746.             });
  5747.         }
  5748.         $this->cache->delete('data_partenaires' $id);
  5749.         $data_partenaires $this->cache->get('data_partenaires' $id, function () use ($id) {
  5750.             return $this->em->getRepository(Partenaire::class)->findByCentreGroupeId($id);
  5751.         });
  5752.         // Récupération de l'url
  5753.         if (empty($_SERVER['HTTP_HOST'])) {
  5754.             return new response('pas de server http host trouvé');
  5755.         }
  5756.         $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https' 'http';
  5757.         $host $_SERVER['HTTP_HOST'];
  5758.         $currentUrl $protocol '://' $host;
  5759.         
  5760.         // Verifie si l'url est different du site de test (serv 150) 
  5761.         if ($currentUrl !== 'https://mercureweb2.autobilan-systems.com') {
  5762.             // Si oui alors supprime le cache sur le site de test (serv 150)
  5763.             $response file_get_contents('https://mercureweb2.autobilan-systems.com/vide_cache_centre_groupe/' $id) ;
  5764.         }
  5765.         return new response('ok');
  5766.     }
  5767. // Gestion de la page erreur ------------------------------------------------------
  5768.     /**
  5769.      * @Route("/admin/admin_erreur", name="admin_erreur")
  5770.      */
  5771.     public function admin_erreur()
  5772.     {
  5773.         return $this->render('admin/admin_erreur.html.twig', []);
  5774.     }
  5775. // Gestion des mots de passe
  5776.     /**
  5777.      * @Route("/mot_de_passe_oublie_admin", name="mot_de_passe_oublie_admin")
  5778.      */
  5779.     public function mot_de_passe_oublie_admin(Request $requestMailerInterface $mailer)
  5780.     {
  5781.         $useEmailCentre false;
  5782.         if (filter_var($request->get('email_oublie'), FILTER_VALIDATE_EMAIL)) {
  5783.             $utillisateur $this->em->getRepository(Utilisateur::class)->findOneBy(['utl_email' => $request->get('email_oublie')]);
  5784.             $emailUser $utillisateur->getUtlEmail();
  5785.         } else {
  5786.             $utillisateur $this->em->getRepository(Utilisateur::class)->findOneBy(['utl_username' => $request->get('email_oublie')]);
  5787.             if ($utillisateur->getUtlEmail()) {
  5788.                 $emailUser $utillisateur->getUtlEmail();
  5789.             } else {
  5790.                 $emailsCentres $this->em->getRepository(Centre::class)->findEmailsByCentreGroupe($utillisateur->getCentreGroupe());
  5791.                 if ($emailsCentres) {
  5792.                     foreach ($emailsCentres as $emailCentre) {
  5793.                         if ($emailCentre['ctr_email']) {
  5794.                             $emailUser $emailCentre['ctr_email'];
  5795.                             $useEmailCentre true;
  5796.                             break;
  5797.                         }
  5798.                     }
  5799.                 } else {
  5800.                     $this->addFlash("error""L'adresse email associé a l'identifiant est introuvable, veuillez réessayer ou appeler le service client si le problème persiste.");
  5801.                     return $this->redirectToRoute('app_login_admin');
  5802.                 }
  5803.             }
  5804.         }
  5805.         if ($utillisateur) {
  5806.             $name $utillisateur->getUtlNom() . ' ' $utillisateur->getUtlPrenom();
  5807.             $email $this->decrypt_encrypt("encrypt"$emailUser);
  5808.             $id $this->decrypt_encrypt("encrypt"$utillisateur->getid());
  5809.             // return $this->render('email/mot_de_passe_oublie.html.twig', array('name' => $name, 'email' => $email, 'id' => $id));
  5810.             $email = (new Email())
  5811.                 ->from('noreply@notification-abs.com')
  5812.                 ->to($emailUser)
  5813.                 // ->to('h.madi@autobilan-systems.com')
  5814.                 //->ReplyTo($rdv->getCentre()->getCtrEmail())
  5815.                 ->subject('Confirmation de votre réservation')
  5816.                 ->html($this->renderView('email/mot_de_passe_oublie_admin.html.twig', ['name' => $name'email' => $email'id' => $id]));
  5817.             $mailer->send($email);
  5818.             if ($useEmailCentre) {
  5819.                 $this->addFlash('success'"Un courrier a été envoyé sur la boite email du centre.");
  5820.             } else {
  5821.                 $this->addFlash('success'"Un courrier a été envoyé sur votre boite email.");
  5822.             }
  5823.             return $this->redirectToRoute('app_login_admin');
  5824.         } else {
  5825.             $this->addFlash("error""L'adresse email est introuvable, appeler le service client si le problème persiste.");
  5826.             return $this->redirectToRoute('app_login_admin');
  5827.         }
  5828.         $this->addFlash("error""L'adresse email ou l'identifiant est introuvable, veuillez réessayer ou appeler le service client si le problème persiste.");
  5829.         return $this->redirectToRoute('app_login_admin');
  5830.     }
  5831.     /**
  5832.      * @Route("/retour_motdepasse_admin", name="retour_motdepasse_admin")
  5833.      */
  5834.     public function retour_motdepasse_admin(Request $requestObjectManager $manager)
  5835.     {
  5836.         if ($request->request->get('mdp1') and $request->request->get('id')) {
  5837.             if ($request->request->get('mdp1') !== $request->request->get('mdp2')) {
  5838.                 $this->addFlash("error""Une erreur s'est produit la confirmation de mot de passe n'est pas correcte.");
  5839.                 return new JsonResponse(['redirectUrl' => $this->generateUrl('app_login_admin')]);
  5840.             }
  5841.             $utilisateur $this->em->getRepository(Utilisateur::class)->find($request->request->get('id'));
  5842.             $hashedPassword $this->passwordHasher->hashPassword(
  5843.                 $utilisateur,
  5844.                 $request->get('mdp1')
  5845.             );
  5846.             $utilisateur->setUtlPassword($hashedPassword);
  5847.             $manager->persist($utilisateur);
  5848.             $manager->flush();
  5849.             $this->addFlash("success""Le mail à bien étaient réinitialisé.");
  5850.             return new JsonResponse(['redirectUrl' => $this->generateUrl('app_login_admin')]);
  5851.         }
  5852.         $email $this->decrypt_encrypt("decrypt"$request->query->get('email'));
  5853.         $id $this->decrypt_encrypt("decrypt"$request->query->get('id'));
  5854.         return $this->render('security/update_password.html.twig', [
  5855.             'id' => $id,
  5856.             'email' => $email,
  5857.         ]);
  5858.     }
  5859.     /**
  5860.      * @Route("/admin/findSmsDoublon/{id}", name="findSmsDoublon")
  5861.      */
  5862.     public function findSmsDoublon(int $idRequest $requestObjectManager $manager)
  5863.     {
  5864.         if (!$this->getUser()) {
  5865.             return new JsonResponse('Acces Non authorise');
  5866.         }
  5867.         $user $this->getUser();
  5868.         $centres = [];
  5869.         $listSms = [];
  5870.         if ($user->getUtlUsername() == 'AbsSuperAdmin') {
  5871.             $repositoryCentreGroupe $this->em->getRepository(CentreGroupe::class);
  5872.             $centreGroupe $repositoryCentreGroupe->find($id);
  5873.             $repositoryCentre $this->em->getRepository(Centre::class);
  5874.             $repositorySms $this->em->getRepository(Sms::class);
  5875.             $centres $repositoryCentre->findBy(['centre_groupe' => $centreGroupe]);
  5876.             $date = new DateTime('2024-02-01');
  5877.             foreach ($centres as $centre) {
  5878.                     $listSmsTemp $repositorySms->findSmsByDate($centre$date);
  5879.                     $listSms array_merge($listSmsTemp$listSms);
  5880.                 }
  5881.             $numbers array_reduce(
  5882.                 $listSms,
  5883.                 function($carry,Sms $value) {
  5884.                     if( !isset($carry[$value->getSmsTelephone()])){
  5885.                         $carry[$value->getSmsTelephone()] = 0;
  5886.                     }
  5887.                     $carry[$value->getSmsTelephone()]++;
  5888.                     return $carry;
  5889.                 },
  5890.                 []
  5891.             );
  5892.             $uniques array_filter($numbers,function($n) {return $n == 1;});
  5893.             $result array_filter(
  5894.                 $listSms,
  5895.                 function(Sms $item) use ($uniques) {
  5896.                     return !isset($uniques[$item->getSmsTelephone()]);
  5897.                 });
  5898.             $sortSms = [];
  5899.             /** @var Sms $sms */
  5900.             foreach ($result as $sms) {
  5901.                 $date $sms->getSmsDate()->format('Y-m-d H:i');
  5902.                 $sbstr substr($date016);
  5903.                 $sortSms[$sms->getSmsTelephone().$sbstr][] = $sms;
  5904.             }
  5905.             $newSortSms = [];
  5906.             foreach ($sortSms as $key => $smss) {
  5907.                 $numbers array_reduce(
  5908.                     $smss,
  5909.                     function($carry,Sms $value) {
  5910.                         $date $value->getSmsDate()->format('Y-m-d H:i');
  5911.                         $sbstr substr($date016);
  5912.                         if( !isset($carry[$sbstr])){
  5913.                             $carry[$sbstr] = 0;
  5914.                         }
  5915.                         $carry[$sbstr]++;
  5916.                         return $carry;
  5917.                     },
  5918.                     []
  5919.                 );
  5920.                 $uniques array_filter($numbers,function($n) {return $n == 1;});
  5921.                 $result2 array_filter(
  5922.                     $smss,
  5923.                     function(Sms $item) use ($uniques) {
  5924.                         $date $item->getSmsDate()->format('Y-m-d H:i');
  5925.                         $sbstr substr($date016);
  5926.                         return !isset($uniques[$sbstr]);
  5927.                     });
  5928.                 $newSortSms[$key] = $result2;
  5929.             }
  5930.             $finalArr = [];
  5931.             foreach ($newSortSms as $key => $sms) {
  5932.                 if ($sms != []) {
  5933.                    $finalArr[$key] = $sms;
  5934.                 }
  5935.             }
  5936.             foreach ($finalArr as $key => $arr) {
  5937.                 unset($finalArr[$key][0]);
  5938.             }
  5939.             return $this->render('admin/doublonSms.html.twig', [
  5940.                 'smss' => $finalArr,
  5941.             ]);
  5942.         }
  5943.         return new JsonResponse('ko');
  5944.     }
  5945. }