src/Controller/RendezVousController.php line 606

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.         $rdv->setEnvoyer(0);
  237.         $rdvRepository->add($rdvtrue);
  238.           // requete repo
  239.           $tranches $tranchesRepo->findItemsCreatedBetweenTwoDates2($datemin,$datemax,$joursFermetures->getId());
  240.           foreach($tranches as $res)
  241.           {
  242.             $res->setOuvert(0);
  243.             $em->persist($res);
  244.             $em->flush();
  245.           }
  246.   
  247.           if($rdv->getEnvoyer() == 0)
  248.           {
  249.        $mj = new \Mailjet\Client('9c42ddfa4db6f8f973a32c7087ea2d51',
  250.        nulltrue,
  251.         ['url' => "api.mailjet.com"'version' => 'v4''call' => false]
  252.       );
  253.       $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.';
  254.    
  255.       
  256.       
  257.       /*  $body = [
  258.         'Text' => $message,
  259.         'To' => $phone,
  260.         'From' => "LLVD",
  261.         ];
  262.         $response = $mj->post(Resources::$SmsSend, ['body' => $body]);
  263.         $response->success();
  264. */
  265.     // Données du message
  266.                /***************************** */
  267.                $data = array(
  268.                 'key' => '0c33c31c02c1e3ef72692c7bec035c96',
  269.                 'destinataires' => $phone,
  270.                 'message' => $message,
  271.                 'expediteur' => 'LLVD',
  272.                 'date' => '',
  273.                 'smslong' => 1
  274.             );
  275.             // Initialisation de cURL avec l'URL Ã  appeler
  276.             $ch curl_init('https://manager.envoyersmspro.com/api/envoyer/sms');
  277.             // Paramètres cURL pour activer le POST et retour de la réponse
  278.             curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
  279.             curl_setopt($chCURLOPT_POST1);
  280.             // Passage des données
  281.             curl_setopt($chCURLOPT_POSTFIELDS,http_build_query($data'''&'));
  282.             // Appel de l'API Envoyer SMS Pro et récupération de la réponse dans la variable $reponse_json
  283.             $reponse_json curl_exec ($ch);
  284.             curl_close ($ch);
  285.             // Conversion JSON en tableau avec json_decode (http://fr2.php.net/manual/fr/function.json-decode.php)
  286.             $reponse_array json_decode($reponse_jsontrue);
  287.             
  288.           
  289.            
  290.             /*************************/
  291.         $to $_POST['email'];
  292.         $subject 'Demande de rendez-vous soumise pour validation';
  293.       $message $this->renderView(
  294.         // templates/emails/registration.txt.twig
  295.             'emails/confirmation.html.twig',
  296.             [
  297.                 'nom' => strtoupper($_POST['nom']), 
  298.                 'prenom' => strtoupper($_POST['prenom']), 
  299.                 'date'=>$_POST['dateInput'], 
  300.                 'heure'=>$_POST['horaireInput'], 
  301.                 'email'=>$_POST['email'], 
  302.                 'telephone'=>$_POST['tel'], 
  303.                 'lieu'=>$lieu->getLibelle(), 
  304.                 'adresse'=>$lieu->getAdresse(), 
  305.                 'telAvocat'=>$avocat->getTel(), 
  306.                 'emailAvocat'=>$avocat->getEmail(), 
  307.                 'avocat'=>$avocat->getNom().' '.$avocat->getPrenom(), 
  308.                 ]
  309.         );
  310.  
  311.         $mj = new \Mailjet\Client('9c42ddfa4db6f8f973a32c7087ea2d51',
  312.         'eace5eb7252f4ff3a1b483251360e04c',true,['version' => 'v3.1']);
  313.         $body = [
  314.             'Messages' => [
  315.                 [
  316.                     'From' => [
  317.                         'Email' => "dontreply@llvd-avocats.be",
  318.                         'Name' => "LLVD AVOCATS"
  319.                     ],
  320.                     'To' => [
  321.                         [
  322.                             'Email' => $to,
  323.                             
  324.                         ],
  325.                         [
  326.                             'Email' => $avocat->getEmail(),
  327.                             
  328.                         ]    
  329.                     ],
  330.                     'Bcc' => [ // ðŸ‘ˆ C’est ici qu’on met Jocelyn en copie cachée
  331.                 [
  332.                     'Email' => 'jocelyn@piranha.lu',
  333.                 ]
  334.             ],
  335.                     'Subject' => $subject,
  336.                     'HTMLPart' => $message,
  337.                 ]
  338.             ]
  339.         ];
  340.         $response $mj->post(Resources::$Email, ['body' => $body]);
  341.         $response->success();
  342.         $rdv->setEnvoyer(1);
  343.         $rdvRepository->add($rdvtrue);
  344.     }
  345.   
  346.        
  347.     }
  348.   
  349.             return $this->render('rendez_vous/confirmation.html.twig', [
  350.                 'nom' => strtoupper($_POST['nom']), 
  351.                 'prenom' => strtoupper($_POST['prenom']), 
  352.                 'date'=>$_POST['dateInput'], 
  353.                 'heure'=>$_POST['horaireInput'], 
  354.                 'email'=>$_POST['email'], 
  355.                 'telephone'=>$_POST['tel'], 
  356.                 'lieu'=>$lieu->getLibelle(), 
  357.                 'adresse'=>$lieu->getAdresse(), 
  358.                 'telAvocat'=>$avocat->getTel(), 
  359.                 'emailAvocat'=>$avocat->getEmail(), 
  360.                 'avocat'=>$avocat->getNom().' '.$avocat->getPrenom(), 
  361.             ]);
  362.     
  363.     }
  364.     
  365. /**
  366.      * @Route("/test", name="test")
  367.      */
  368.     public function test(Request $requestAvocatsRepository $avocatsRepository,StatutsRepository $statutsRepositoryRendezVousRepository $rdvRepository,LieuxRepository $lieuxRepository): Response
  369.     {
  370.         $curl curl_init();
  371.         curl_setopt_array($curl, array(
  372.         CURLOPT_URL => 'https://middleware-production.easy2pilot-v8.com/api/9e16fd2e-b40e-11ec-acaa-a4bf0128f2ba/token',
  373.         CURLOPT_RETURNTRANSFER => true,
  374.         CURLOPT_ENCODING => '',
  375.         CURLOPT_MAXREDIRS => 10,
  376.         CURLOPT_TIMEOUT => 0,
  377.         CURLOPT_FOLLOWLOCATION => true,
  378.         CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  379.         CURLOPT_CUSTOMREQUEST => 'GET',
  380.         CURLOPT_HTTPHEADER => array(
  381.             'login: LAGENCE-ARE',
  382.             'password: Kf45yTxW',
  383.             'Content-Type: application/json'
  384.         ),
  385.         ));
  386.         $response curl_exec($curl);
  387.         curl_close($curl);
  388.                 $result json_decode($responsetrue);
  389.             $token $result['data']['token'];
  390.             $curl curl_init();
  391.             curl_setopt_array($curl, array(
  392.             CURLOPT_URL => 'https://middleware-production.easy2pilot-v8.com/api/9e16fd2e-b40e-11ec-acaa-a4bf0128f2ba/annonces',
  393.             CURLOPT_RETURNTRANSFER => true,
  394.             CURLOPT_ENCODING => '',
  395.             CURLOPT_MAXREDIRS => 10,
  396.             CURLOPT_TIMEOUT => 0,
  397.             CURLOPT_FOLLOWLOCATION => true,
  398.             CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  399.             CURLOPT_CUSTOMREQUEST => 'GET',
  400.             CURLOPT_HTTPHEADER => array(
  401.                 'login: LAGENCE-ARE',
  402.                 'password: Kf45yTxW',
  403.                 "token: $token"
  404.             ),
  405.             ));
  406.     
  407.             $response curl_exec($curl);
  408.     
  409.             curl_close($curl);
  410.     
  411.                     $result json_decode($responsetrue);
  412.                     dd($result);
  413.         
  414.     }
  415. /**
  416.      * @Route("/exportRdv/{avocat}", name="exportRdv")
  417.      */
  418.     public function exportRdv(Request $requestAvocatsRepository $avocatsRepository,StatutsRepository $statutsRepositoryRendezVousRepository $rdvRepository,LieuxRepository $lieuxRepository$avocat): Response
  419.     {
  420.         $av $avocatsRepository->findOneById($avocat);
  421.         $rdvs $rdvRepository->findBy(['Avocats'=>$avocat,'Statuts'=>2]);
  422.       
  423.         $i= -1;
  424.         $events = array();
  425.         foreach($rdvs as $rdv)
  426.         {
  427.             $i++;
  428.             $liste = array();
  429.             $titre 'Rendez-vous avec '.$rdv->getNom().' '.$rdv->getPrenom();
  430.             $liste['title'] =  $titre;
  431.             $liste['description'] =  "";
  432.             $liste['start_date'] =  $rdv->getDate()->format('Y-m-d H:i:s');
  433.             $liste['end_date'] =  $rdv->getDateFin()->format('Y-m-d H:i:s');
  434.             $liste['location'] =  $rdv->getLieux()->getLibelle();
  435.             $events[$i] = $liste;
  436.         }
  437.        
  438.         
  439.         // Construire le contenu ICS
  440.         $icsContent "BEGIN:VCALENDAR\r\n";
  441.         $icsContent .= "VERSION:2.0\r\n";
  442.         $icsContent .= "PRODID:-//YourCompany//YourApp//EN\r\n";
  443.         
  444.         foreach ($events as $event) {
  445.             $icsContent .= "BEGIN:VEVENT\r\n";
  446.             $icsContent .= "DTSTART:" gmdate('Ymd\THis\Z'strtotime($event['start_date'])) . "\r\n";
  447.             $icsContent .= "DTEND:" gmdate('Ymd\THis\Z'strtotime($event['end_date'])) . "\r\n";
  448.             $icsContent .= "SUMMARY:" $event['title'] . "\r\n";
  449.             $icsContent .= "DESCRIPTION:" $event['description'] . "\r\n";
  450.             $icsContent .= "LOCATION:" $event['location'] . "\r\n";
  451.             $icsContent .= "END:VEVENT\r\n";
  452.         }
  453.         
  454.         $icsContent .= "END:VCALENDAR\r\n";
  455. // En-têtes HTTP pour indiquer le type de contenu
  456. header('Content-Type: text/calendar');
  457. header('Content-Disposition: attachment; filename="event.ics"');
  458. // Afficher le contenu ICS
  459. return new Response($icsContent);
  460.     }
  461. /**
  462.      * @Route("/deleteJours/{id}", name="deleteJours")
  463.      */
  464.     public function deleteJours($idRequest $requestJoursFermeturesRepository $joursFermeturesRepositoryTranchesRepository $tranchesRepository ): Response
  465.     {
  466.             $jours $joursFermeturesRepository->findOneById($id);
  467.             $tranches $tranchesRepository->findBy(array('JoursFermetures'=>$jours));
  468.             foreach($tranches as $res)
  469.             {
  470.                 $tranchesRepository->remove($res,true);
  471.             }
  472.             $joursFermeturesRepository->remove($jours,true);
  473.             return $this->redirectToRoute('app_jours_fermetures_new', ['lieu'=>$jours->getLieux()->getId(),'avocat'=>$jours->getAvocats()->getId()], Response::HTTP_SEE_OTHER);
  474.     }
  475.    
  476. }