src/Controller/RendezVousController.php line 224

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\Routing\Annotation\Route;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use App\Entity\Avocats;
  8. use App\Entity\RendezVous;
  9. use App\Form\AvocatsType;
  10. use App\Repository\AvocatsRepository;
  11. use App\Repository\StatutsRepository;
  12. use App\Repository\RendezVousRepository;
  13. use App\Repository\TranchesRepository;
  14. use App\Repository\LieuxRepository;
  15. use App\Repository\JoursFermeturesRepository;
  16. use App\Repository\JoursSemaineRepository;
  17. use Datetime;
  18. use DateInterval;
  19. use Mailjet\Api\Client;
  20. use Mailjet\Resources;
  21. use Eluceo\iCal\Domain\Entity\Calendar;
  22. use Eluceo\iCal\Domain\Entity\Event;
  23. use Eluceo\iCal\Property\Event\Location;
  24. use Eluceo\iCal\Property\Event\Text;
  25. class RendezVousController extends AbstractController
  26. {
  27.     /**
  28.      * @Route("/rendezvous", name="app_rendez_vous")
  29.      */
  30.     public function index(Request $requestJoursSemaineRepository $joursSemaineRepoAvocatsRepository $avocatsRepository,JoursFermeturesRepository $joursFermeturesRepo,LieuxRepository $lieuxRepository): Response
  31.     {
  32.         
  33.         $avocatsListe = array();
  34.         if(isset($_GET['lieu']))
  35.         {
  36.             $lieuGet $_GET['lieu'];
  37.             $avocatsListe $joursSemaineRepo->findBy(array('Lieux'=> $lieuGet) );
  38.         }
  39.         else
  40.         {
  41.             $lieuGet 'vide';
  42.         }
  43.         if(isset($_GET['avocat']))
  44.         {
  45.             $avocat $_GET['avocat'];
  46.             $avocatGet $_GET['avocat'];
  47.         }
  48.         else
  49.         {
  50.             $avocat '';
  51.             $avocatGet '';
  52.         }
  53.         $date date('d-m-Y');
  54.         $date strtotime($date);
  55.         $date strtotime("+8 day"$date);
  56.         $date date('d-m-Y'$date);
  57.         // FERMETURE GENERALE
  58.         $fermeture = array();
  59.         $jfGlobal $joursFermeturesRepo->findBy(array('Avocats'=>$avocat,'Lieux'=>$lieuGet));
  60.         foreach($jfGlobal as $res)
  61.         {
  62.             $j ltrim($res->getDate()->format('d'),'0');
  63.             $m =  ltrim($res->getDate()->format('m'),'0');
  64.             
  65.             $y $res->getDate()->format('Y');
  66.             $d $j.'-'.$m.'-'.$y;
  67.             array_push($fermeture,$d);
  68.         }
  69.         
  70.   
  71.      
  72.        
  73.         
  74.        
  75.         return $this->render('rendez_vous/index.html.twig', [
  76.             'avocat' => $avocatsRepository->findOneById($avocat),
  77.             'lieux' => $lieuxRepository->findAll(),
  78.             'date'=>$date,
  79.             'fermeture'=>$fermeture,
  80.             'lieuGet'=>$lieuGet,
  81.            
  82.             'avocatsListe'=>$avocatsListe,
  83.             'avocatGet' => $avocatGet
  84.         ]);
  85.     }
  86.     /**
  87.      * @Route("/ajaxTranchesHoraires", name="ajaxTranchesHoraires")
  88.      */
  89.     public function ajaxTranchesHoraires(Request $requestTranchesRepository $tranchesRepoJoursFermeturesRepository $joursFermeturesRepoRendezVousRepository $rdvRepoAvocatsRepository $avocatsRepository,LieuxRepository $lieuxRepository): Response
  90.     {
  91.         
  92.         $lieu "'".$_POST['lieu']."'";
  93.         $joursSemaine $joursFermeturesRepo->findOneBy(array('Avocats'=>$_POST['avocat'],'Lieux'=>$_POST['lieu'],'Date'=>new Datetime($_POST['date'])));
  94.         
  95.        
  96.         $tranches $tranchesRepo->findBy(array('JoursFermetures'=>$joursSemaine,'Ouvert'=>1));
  97.         $chaine '';
  98.         $chaine .= "<div class='row'><div class='col-12'><div class='row'>";
  99.         $i 0;
  100.         foreach($tranches as $res)
  101.         {
  102.             $date="'".$res->getDate()->format('d-m-Y')."'";
  103.             $tranche "'".$res->getDate()->format('H:i')."'";
  104.             $trancheB $res->getDate()->format('H:i');
  105.                 
  106.              if($res->isOccupe())
  107.              {
  108.              }  
  109.              else
  110.              {   
  111.                 $i++;     
  112.                 $chaine .= '<div class="col-sm-2"><button type="button"  data-toggle="modal" data-target="#exampleModal" class="btn btn-default disponible" id="id" onclick="selectHoraire(' $date ',' $lieu  ','.$tranche.')" value="' $trancheB '">' $trancheB'</button> </div>';
  113.              }  
  114.         }
  115.         if($i == 0)
  116.         {
  117.             $chaine .= '<div class="alert alert-danger" role="alert" style="font-size:18px">
  118.                 Il n\'y a plus de disponibilités pour cette date
  119.             </div>';
  120.         }
  121.         $chaine .= '</div></div></div>';
  122.   
  123.        /* $dernierRdv = '';
  124.             
  125.             $chaine = '';
  126.             $chaine .= "<div class='row'>";
  127.             $y=0;
  128.             foreach($heures as $res)
  129.             {
  130.                 $y++;
  131.                 
  132.             foreach($minutes as $res2)
  133.             {
  134.                 $tranche = $res."h".$res2;
  135.                 $trancheB = "'".$tranche."'";
  136.                 $trancheC = $res.":".$res2.":00";
  137.                 
  138.                 $date = "'".$_POST['date']."'";
  139.                 $lieu = "'".$_POST['lieu']."'";
  140.                 $datetempDebut1 = new Datetime($_POST['date'].' '.$trancheC);
  141.                 $datetempFin1s = date('Y-m-d H:i:s',strtotime('+1 hour',strtotime($_POST['date'].' '.$trancheC)));
  142.                 $datetempFin1 = new Datetime($datetempFin1s);
  143.                 $nbRdv = $rdvRepo->findItemsCreatedBetweenTwoDates($datetempDebut1,$datetempFin1);
  144.                
  145.                 if(count($nbRdv) == 0)
  146.                 {
  147.                     
  148.                     $datetempDebuts1 = date('Y-m-d H:i:s',strtotime('-30 min',strtotime($_POST['date'].' '.$trancheC)));
  149.                     $datetempDebut1 = new Datetime($datetempDebuts1);
  150.                     $datetempFin1s = date('Y-m-d H:i:s',strtotime('+30 min',strtotime($_POST['date'].' '.$trancheC)));
  151.                     $datetempFin1 = new Datetime($datetempFin1s);
  152.                     $nbRdv2 = $rdvRepo->findItemsCreatedBetweenTwoDates($datetempDebut1,$datetempFin1);
  153.                     if(count($nbRdv2) == 0)
  154.                         {
  155.                            
  156.                                 $chaine .= '<div class="col-sm-2"><button type="button"  data-toggle="modal" data-target="#exampleModal" class="btn btn-default disponible" id="' . $tranche . '" onclick="selectHoraire(' . $date . ',' . $lieu  . ',' . $trancheB . ')" value="' . $tranche . '">' . $tranche. '</button> </div>';
  157.                             
  158.                         }
  159.                     
  160.                 }
  161.                 
  162.                   
  163.                  
  164.                 
  165.                    
  166.                       
  167.                 
  168.                 
  169.                    
  170.                
  171.             }
  172.             
  173.                
  174.             }
  175.             $chaine .= "</div>";*/
  176.        
  177.             return new Response($chaine);
  178.     }
  179. /**
  180.      * @Route("/confirmerRdv", name="confirmerRdv")
  181.      */
  182.     public function confirmerRdv(Request $request,JoursFermeturesRepository $joursFermeturesRepoTranchesRepository $tranchesRepoAvocatsRepository $avocatsRepository,StatutsRepository $statutsRepositoryRendezVousRepository $rdvRepository,LieuxRepository $lieuxRepository): Response
  183.     {
  184.         $em $this->getDoctrine()->getManager();
  185.         $avocat $avocatsRepository->findOneById($_POST['avocatInput']);
  186.         $lieu $lieuxRepository->findOneById($_POST['lieuInput']);
  187.         $statuts $statutsRepository->findOneById(1);
  188.      
  189.         $dateT $_POST['dateInput'].' '.str_replace('h',':',$_POST['horaireInput']).':00';
  190.         $date = new Datetime($dateT);
  191.         
  192.         $dateTemp = new Datetime($_POST['dateInput']);
  193.       
  194.         $date2 = new Datetime($dateT);
  195.         $date2->add(new DateInterval('PT1H'));
  196.         $date3 = new Datetime($dateT);
  197.         $date3->modify('- 30 min');
  198.        
  199.         $datemin $date3->format('Y-m-d H:i:s');
  200.         $datemax $date2->format('Y-m-d H:i:s');
  201.         $joursFermetures $joursFermeturesRepo->findOneBy(array('Avocats'=>$avocat,'Lieux'=>$lieu,'Date'=>$dateTemp));
  202.         
  203.       
  204.         
  205.       if($_POST['tel'][0] == '0')
  206.       {
  207.         
  208.       $phone substr($_POST['tel'],1);
  209.       }
  210.       else
  211.       {
  212.         $phone $_POST['tel'];
  213.       }
  214.       
  215.       
  216.       $phone $_POST['extension'].$phone;
  217.       
  218.       $rdvExist $rdvRepository->findOneBy(['Date'=>$date,'Avocats'=>$avocat]);
  219.       
  220.       if($rdvExist == '')
  221.       {
  222.     
  223.         $rdv = new RendezVous();
  224.         $rdv->setCreated(new Datetime());
  225.         $rdv->setAvocats($avocat);
  226.         $rdv->setLieux($lieu);
  227.         $rdv->setNom($_POST['nom']);
  228.         $rdv->setPrenom($_POST['prenom']);
  229.         $rdv->setTelephone($phone);
  230.         $rdv->setEmail($_POST['email']);
  231.         $rdv->setMotif($_POST['motif']);
  232.         $rdv->setStatuts($statuts);
  233.         $rdv->setHoraires($_POST['horaireInput']);
  234.         $rdv->setDate($date);
  235.         $rdv->setDateFin($date2);
  236.         $rdvRepository->add($rdvtrue);
  237.           // requete repo
  238.           $tranches $tranchesRepo->findItemsCreatedBetweenTwoDates2($datemin,$datemax,$joursFermetures->getId());
  239.           foreach($tranches as $res)
  240.           {
  241.             $res->setOuvert(0);
  242.             $em->persist($res);
  243.             $em->flush();
  244.           }
  245.   
  246.        $mj = new \Mailjet\Client('9c42ddfa4db6f8f973a32c7087ea2d51',
  247.        nulltrue,
  248.         ['url' => "api.mailjet.com"'version' => 'v4''call' => false]
  249.       );
  250.       $message 'Bonjour '.$_POST['prenom'].', Nous avons bien reçu votre demande de rendez-vous du '.$_POST['dateInput'].' Ã  '.$_POST['horaireInput'].' avec maître '.$avocat->getNom().' '.$avocat->getPrenom().' et vous invitons Ã  vérifier vos emails pour la suite y réservée.';
  251.    
  252.       
  253.       
  254.       /*  $body = [
  255.         'Text' => $message,
  256.         'To' => $phone,
  257.         'From' => "LLVD",
  258.         ];
  259.         $response = $mj->post(Resources::$SmsSend, ['body' => $body]);
  260.         $response->success();
  261. */
  262.     // Données du message
  263.                /***************************** */
  264.                $data = array(
  265.                 'key' => '0c33c31c02c1e3ef72692c7bec035c96',
  266.                 'destinataires' => $phone,
  267.                 'message' => $message,
  268.                 'expediteur' => 'LLVD',
  269.                 'date' => '',
  270.                 'smslong' => 1
  271.             );
  272.             // Initialisation de cURL avec l'URL Ã  appeler
  273.             $ch curl_init('https://manager.envoyersmspro.com/api/envoyer/sms');
  274.             // Paramètres cURL pour activer le POST et retour de la réponse
  275.             curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
  276.             curl_setopt($chCURLOPT_POST1);
  277.             // Passage des données
  278.             curl_setopt($chCURLOPT_POSTFIELDS,http_build_query($data'''&'));
  279.             // Appel de l'API Envoyer SMS Pro et récupération de la réponse dans la variable $reponse_json
  280.             $reponse_json curl_exec ($ch);
  281.             curl_close ($ch);
  282.             // Conversion JSON en tableau avec json_decode (http://fr2.php.net/manual/fr/function.json-decode.php)
  283.             $reponse_array json_decode($reponse_jsontrue);
  284.             
  285.           
  286.            
  287.             /*************************/
  288.         $to $_POST['email'];
  289.         $subject 'Demande de rendez-vous soumise pour validation';
  290.       $message $this->renderView(
  291.         // templates/emails/registration.txt.twig
  292.             'emails/confirmation.html.twig',
  293.             [
  294.                 'nom' => strtoupper($_POST['nom']), 
  295.                 'prenom' => strtoupper($_POST['prenom']), 
  296.                 'date'=>$_POST['dateInput'], 
  297.                 'heure'=>$_POST['horaireInput'], 
  298.                 'email'=>$_POST['email'], 
  299.                 'telephone'=>$_POST['tel'], 
  300.                 'lieu'=>$lieu->getLibelle(), 
  301.                 'adresse'=>$lieu->getAdresse(), 
  302.                 'telAvocat'=>$avocat->getTel(), 
  303.                 'emailAvocat'=>$avocat->getEmail(), 
  304.                 'avocat'=>$avocat->getNom().' '.$avocat->getPrenom(), 
  305.                 ]
  306.         );
  307.  
  308.         $mj = new \Mailjet\Client('9c42ddfa4db6f8f973a32c7087ea2d51',
  309.         'eace5eb7252f4ff3a1b483251360e04c',true,['version' => 'v3.1']);
  310.         $body = [
  311.             'Messages' => [
  312.                 [
  313.                     'From' => [
  314.                         'Email' => "dontreply@llvd-avocats.be",
  315.                         'Name' => "LLVD AVOCATS"
  316.                     ],
  317.                     'To' => [
  318.                         [
  319.                             'Email' => $to,
  320.                             
  321.                         ],
  322.                         [
  323.                             'Email' => $avocat->getEmail(),
  324.                             
  325.                         ]    
  326.                     ],
  327.                     'Bcc' => [ // ðŸ‘ˆ C’est ici qu’on met Jocelyn en copie cachée
  328.                 [
  329.                     'Email' => 'jocelyn@piranha.lu',
  330.                 ]
  331.             ],
  332.                     'Subject' => $subject,
  333.                     'HTMLPart' => $message,
  334.                 ]
  335.             ]
  336.         ];
  337.         $response $mj->post(Resources::$Email, ['body' => $body]);
  338.         $response->success();
  339.   
  340.        
  341.     }
  342.   
  343.             return $this->render('rendez_vous/confirmation.html.twig', [
  344.                 'nom' => strtoupper($_POST['nom']), 
  345.                 'prenom' => strtoupper($_POST['prenom']), 
  346.                 'date'=>$_POST['dateInput'], 
  347.                 'heure'=>$_POST['horaireInput'], 
  348.                 'email'=>$_POST['email'], 
  349.                 'telephone'=>$_POST['tel'], 
  350.                 'lieu'=>$lieu->getLibelle(), 
  351.                 'adresse'=>$lieu->getAdresse(), 
  352.                 'telAvocat'=>$avocat->getTel(), 
  353.                 'emailAvocat'=>$avocat->getEmail(), 
  354.                 'avocat'=>$avocat->getNom().' '.$avocat->getPrenom(), 
  355.             ]);
  356.     
  357.     }
  358.     
  359. /**
  360.      * @Route("/test", name="test")
  361.      */
  362.     public function test(Request $requestAvocatsRepository $avocatsRepository,StatutsRepository $statutsRepositoryRendezVousRepository $rdvRepository,LieuxRepository $lieuxRepository): Response
  363.     {
  364.         $curl curl_init();
  365.         curl_setopt_array($curl, array(
  366.         CURLOPT_URL => 'https://middleware-production.easy2pilot-v8.com/api/9e16fd2e-b40e-11ec-acaa-a4bf0128f2ba/token',
  367.         CURLOPT_RETURNTRANSFER => true,
  368.         CURLOPT_ENCODING => '',
  369.         CURLOPT_MAXREDIRS => 10,
  370.         CURLOPT_TIMEOUT => 0,
  371.         CURLOPT_FOLLOWLOCATION => true,
  372.         CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  373.         CURLOPT_CUSTOMREQUEST => 'GET',
  374.         CURLOPT_HTTPHEADER => array(
  375.             'login: LAGENCE-ARE',
  376.             'password: Kf45yTxW',
  377.             'Content-Type: application/json'
  378.         ),
  379.         ));
  380.         $response curl_exec($curl);
  381.         curl_close($curl);
  382.                 $result json_decode($responsetrue);
  383.             $token $result['data']['token'];
  384.             $curl curl_init();
  385.             curl_setopt_array($curl, array(
  386.             CURLOPT_URL => 'https://middleware-production.easy2pilot-v8.com/api/9e16fd2e-b40e-11ec-acaa-a4bf0128f2ba/annonces',
  387.             CURLOPT_RETURNTRANSFER => true,
  388.             CURLOPT_ENCODING => '',
  389.             CURLOPT_MAXREDIRS => 10,
  390.             CURLOPT_TIMEOUT => 0,
  391.             CURLOPT_FOLLOWLOCATION => true,
  392.             CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  393.             CURLOPT_CUSTOMREQUEST => 'GET',
  394.             CURLOPT_HTTPHEADER => array(
  395.                 'login: LAGENCE-ARE',
  396.                 'password: Kf45yTxW',
  397.                 "token: $token"
  398.             ),
  399.             ));
  400.     
  401.             $response curl_exec($curl);
  402.     
  403.             curl_close($curl);
  404.     
  405.                     $result json_decode($responsetrue);
  406.                     dd($result);
  407.         
  408.     }
  409. /**
  410.      * @Route("/exportRdv/{avocat}", name="exportRdv")
  411.      */
  412.     public function exportRdv(Request $requestAvocatsRepository $avocatsRepository,StatutsRepository $statutsRepositoryRendezVousRepository $rdvRepository,LieuxRepository $lieuxRepository$avocat): Response
  413.     {
  414.         $av $avocatsRepository->findOneById($avocat);
  415.         $rdvs $rdvRepository->findBy(['Avocats'=>$avocat,'Statuts'=>2]);
  416.       
  417.         $i= -1;
  418.         $events = array();
  419.         foreach($rdvs as $rdv)
  420.         {
  421.             $i++;
  422.             $liste = array();
  423.             $titre 'Rendez-vous avec '.$rdv->getNom().' '.$rdv->getPrenom();
  424.             $liste['title'] =  $titre;
  425.             $liste['description'] =  "";
  426.             $liste['start_date'] =  $rdv->getDate()->format('Y-m-d H:i:s');
  427.             $liste['end_date'] =  $rdv->getDateFin()->format('Y-m-d H:i:s');
  428.             $liste['location'] =  $rdv->getLieux()->getLibelle();
  429.             $events[$i] = $liste;
  430.         }
  431.        
  432.         
  433.         // Construire le contenu ICS
  434.         $icsContent "BEGIN:VCALENDAR\r\n";
  435.         $icsContent .= "VERSION:2.0\r\n";
  436.         $icsContent .= "PRODID:-//YourCompany//YourApp//EN\r\n";
  437.         
  438.         foreach ($events as $event) {
  439.             $icsContent .= "BEGIN:VEVENT\r\n";
  440.             $icsContent .= "DTSTART:" gmdate('Ymd\THis\Z'strtotime($event['start_date'])) . "\r\n";
  441.             $icsContent .= "DTEND:" gmdate('Ymd\THis\Z'strtotime($event['end_date'])) . "\r\n";
  442.             $icsContent .= "SUMMARY:" $event['title'] . "\r\n";
  443.             $icsContent .= "DESCRIPTION:" $event['description'] . "\r\n";
  444.             $icsContent .= "LOCATION:" $event['location'] . "\r\n";
  445.             $icsContent .= "END:VEVENT\r\n";
  446.         }
  447.         
  448.         $icsContent .= "END:VCALENDAR\r\n";
  449. // En-têtes HTTP pour indiquer le type de contenu
  450. header('Content-Type: text/calendar');
  451. header('Content-Disposition: attachment; filename="event.ics"');
  452. // Afficher le contenu ICS
  453. return new Response($icsContent);
  454.     }
  455. /**
  456.      * @Route("/deleteJours/{id}", name="deleteJours")
  457.      */
  458.     public function deleteJours($idRequest $requestJoursFermeturesRepository $joursFermeturesRepositoryTranchesRepository $tranchesRepository ): Response
  459.     {
  460.             $jours $joursFermeturesRepository->findOneById($id);
  461.             $tranches $tranchesRepository->findBy(array('JoursFermetures'=>$jours));
  462.             foreach($tranches as $res)
  463.             {
  464.                 $tranchesRepository->remove($res,true);
  465.             }
  466.             $joursFermeturesRepository->remove($jours,true);
  467.             return $this->redirectToRoute('app_jours_fermetures_new', ['lieu'=>$jours->getLieux()->getId(),'avocat'=>$jours->getAvocats()->getId()], Response::HTTP_SEE_OTHER);
  468.     }
  469.    
  470. }