src/Controller/HomeController.php line 31

Open in your IDE?
  1. <?php
  2. /*
  3. * ==============================================================
  4. *     Autor            :  Farid Benjomaa
  5. *     Modified by        :  
  6. *    COPYRIGHT (C) 2025, Media-Technologies
  7. * ==============================================================
  8. */
  9. namespace App\Controller;
  10. use DateTime;
  11. use App\Entity\Config;
  12. use App\Entity\Emails;
  13. use App\Form\AvisType;
  14. use App\Form\ChatType;
  15. use App\Services\Mercure;
  16. use App\Services\CallApiTab;
  17. use Symfony\Component\HttpFoundation\Request;
  18. use App\Services\CallApiServices;
  19. use Doctrine\DBAL\Driver\IBMDB2\Result;
  20. use Symfony\Component\HttpFoundation\Response;
  21. use Symfony\Component\Routing\Annotation\Route;
  22. use Symfony\Component\HttpFoundation\Session\Session;
  23. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  24. class HomeController extends AbstractController
  25. {
  26.     public function __construct(CallApiTab $callApiTab)
  27.     {
  28.         $this->endpoint $callApiTab->endpoint();
  29.     }
  30.     /**
  31.      * @Route("/", name="app_home")
  32.      */
  33.     public function index(): Response
  34.     {
  35.         return $this->render('home/index.html.twig', [
  36.             'controller_name' => 'HomeController',
  37.         ]);
  38.     }
  39.     /**
  40.      * @Route("/", name="app_home", methods={"GET", "POST"})
  41.      */
  42.     public function getConseiller(CallApiServices $callApiServicesRequest $request): Response
  43.     {
  44.         $user $this->getUser();
  45.         // $serviceId = $this->getParameter('app.serviceId');
  46.         // if ($user) {
  47.         //     $client = $callApiServices->clientProfile($serviceId, $user->getClientId());
  48.         //     $user->setSolde($client['solde']);
  49.         // }
  50.         $serviceId $this->getParameter('app.serviceId');
  51.         $clientId 0;
  52.         $session = new Session();
  53.         if ($user) {
  54.             $clientId $user->getClientId();
  55.             $client $callApiServices->clientProfileCheck($serviceId$clientId);
  56.             if (isset($client['responseCode'])) {
  57.                 return $this->redirectToRoute('app_logout');
  58.             }
  59.             $user->setSolde($client['solde']);
  60.         }
  61.       
  62.         $accountId $this->getParameter('app.accountId');
  63.         $conseillers $callApiServices->getListConseillers($accountId$serviceId);
  64.         $config $callApiServices->configuratationPlateforme($accountId$serviceId);
  65.         array_multisort(
  66.             array_column($conseillers'userServiceId'),
  67.             SORT_DESC,
  68.             $conseillers
  69.         );
  70.         usort($conseillers, fn ($a$b) => [
  71.             [=> 1=> 2=> 3][$a['userState']],
  72.         ] <=> [
  73.             [=> 1=> 2=> 3][$b['userState']],
  74.         ]);
  75.         usort($conseillers, fn ($a$b) => [
  76.             [=> 1=> 2=> 3][$a['userState']],
  77.         ] <=> [
  78.             [=> 1=> 2=> 3][$b['userState']],
  79.         ]);
  80.         $configPlateforme = new Config();
  81.         $configPlateforme->setKindOfCredit($config['kindOfCredit']);
  82.         $configPlateforme->setItemsPerPage($config['itemsPerPage']);
  83.         $configPlateforme->setItemsPerRow($config['itemsPerRow']);
  84.         $configPlateforme->setWelcomeCredit($config['welcomeCredit']);
  85.         $configPlateforme->setRecaptchaTab($config['recaptchaTab']);
  86.         $configPlateforme->setPaymentInfos($config['paymentInfos']);
  87.         $configPlateforme->setMail($config['mail']);
  88.         $configPlateforme->setServiceId($serviceId);
  89.         $configPlateforme->setAccountId($accountId);
  90.         $configPlateforme->setMarchand($config['marchand']);
  91.         //$session = new Session();
  92.         $session->set('configPlateforme'$configPlateforme);
  93.         return $this->render('home/index.html.twig', [
  94.             'conseillers' => $conseillers,
  95.             'config' => $config,
  96.             'clientId' => $clientId
  97.         ]);
  98.     }
  99.     /**
  100.      * @Route("/consultant/{id}", name="app_consultant", methods={"GET", "POST"})
  101.      */
  102.     public function conseillerEtPlanning(CallApiServices $callApiServicesRequest $request$id): Response
  103.     {
  104.         $user $this->getUser();
  105.         $clientId 0;
  106.         $serviceId $this->getParameter('app.serviceId');
  107.         if ($user) {
  108.             $client $callApiServices->clientProfileCheck($serviceId$user->getClientId());
  109.             $user->setSolde($client['solde']);
  110.             $clientId $user->getClientId();
  111.         }
  112.         $accountId $this->getParameter('app.accountId');
  113.         $conseillerAvis $callApiServices->conseillerAvis($serviceId$id);
  114.         $conseiller $callApiServices->conseillerEtPlanning($id$serviceId);
  115.         if (!isset($conseiller[0])) {
  116.             // le conseiller n'est pas configuré
  117.             return $this->redirectToRoute('app_home');
  118.         }
  119.         $session $request->getSession();
  120.         $session->set('complementId'$id);
  121.         $weekdaysShort = ['Lun''Mar''Mer''Jeu''Ven''Sam''Dim'];
  122.         $daysHoursShort = [
  123.             => ['Lun' => false'Mar' => false'Mer' => false'Jeu' => false'Ven' => false'Sam' => false'Dim' => false],
  124.             => ['Lun' => false'Mar' => false'Mer' => false'Jeu' => false'Ven' => false'Sam' => false'Dim' => false],
  125.             => ['Lun' => false'Mar' => false'Mer' => false'Jeu' => false'Ven' => false'Sam' => false'Dim' => false],
  126.             => ['Lun' => false'Mar' => false'Mer' => false'Jeu' => false'Ven' => false'Sam' => false'Dim' => false],
  127.             => ['Lun' => false'Mar' => false'Mer' => false'Jeu' => false'Ven' => false'Sam' => false'Dim' => false],
  128.             => ['Lun' => false'Mar' => false'Mer' => false'Jeu' => false'Ven' => false'Sam' => false'Dim' => false],
  129.             => ['Lun' => false'Mar' => false'Mer' => false'Jeu' => false'Ven' => false'Sam' => false'Dim' => false],
  130.             => ['Lun' => false'Mar' => false'Mer' => false'Jeu' => false'Ven' => false'Sam' => false'Dim' => false],
  131.             => ['Lun' => false'Mar' => false'Mer' => false'Jeu' => false'Ven' => false'Sam' => false'Dim' => false],
  132.             => ['Lun' => false'Mar' => false'Mer' => false'Jeu' => false'Ven' => false'Sam' => false'Dim' => false],
  133.             10 => ['Lun' => false'Mar' => false'Mer' => false'Jeu' => false'Ven' => false'Sam' => false'Dim' => false],
  134.             11 => ['Lun' => false'Mar' => false'Mer' => false'Jeu' => false'Ven' => false'Sam' => false'Dim' => false],
  135.             12 => ['Lun' => false'Mar' => false'Mer' => false'Jeu' => false'Ven' => false'Sam' => false'Dim' => false],
  136.             13 => ['Lun' => false'Mar' => false'Mer' => false'Jeu' => false'Ven' => false'Sam' => false'Dim' => false],
  137.             14 => ['Lun' => false'Mar' => false'Mer' => false'Jeu' => false'Ven' => false'Sam' => false'Dim' => false],
  138.             15 => ['Lun' => false'Mar' => false'Mer' => false'Jeu' => false'Ven' => false'Sam' => false'Dim' => false],
  139.             16 => ['Lun' => false'Mar' => false'Mer' => false'Jeu' => false'Ven' => false'Sam' => false'Dim' => false],
  140.             17 => ['Lun' => false'Mar' => false'Mer' => false'Jeu' => false'Ven' => false'Sam' => false'Dim' => false],
  141.             18 => ['Lun' => false'Mar' => false'Mer' => false'Jeu' => false'Ven' => false'Sam' => false'Dim' => false],
  142.             19 => ['Lun' => false'Mar' => false'Mer' => false'Jeu' => false'Ven' => false'Sam' => false'Dim' => false],
  143.             20 => ['Lun' => false'Mar' => false'Mer' => false'Jeu' => false'Ven' => false'Sam' => false'Dim' => false],
  144.             21 => ['Lun' => false'Mar' => false'Mer' => false'Jeu' => false'Ven' => false'Sam' => false'Dim' => false],
  145.             22 => ['Lun' => false'Mar' => false'Mer' => false'Jeu' => false'Ven' => false'Sam' => false'Dim' => false],
  146.             23 => ['Lun' => false'Mar' => false'Mer' => false'Jeu' => false'Ven' => false'Sam' => false'Dim' => false]
  147.         ];
  148.         $i 0;
  149.         foreach ($conseiller[0]['planningArray'] as $planing) {
  150.             $begin[] = explode(':'$planing['begin']);
  151.             $end[] = explode(':'$planing['end']);
  152.             $day[] = $planing['weekDayNum'];
  153.             $hourEnd[] = $end[$i][0];
  154.             $hourBegin[] = $begin[$i][0];
  155.             $minuteEnd[] = $end[$i][1];
  156.             $minuteBegin[] = $begin[$i][1];
  157.             $calcul $hourEnd[$i] -  $hourBegin[$i];
  158.             $h 0;
  159.             $weekday $weekdaysShort[$planing['weekDayNum']];
  160.             while ($calcul $h) {
  161.                 $daysHoursShort[$begin[$i][0] + $h][$weekday] = true;
  162.                 $h++;
  163.             }
  164.             $i++;
  165.         };
  166.         $plan[] = [];
  167.         $ressources = [];
  168.         $planningEventId "";
  169.         foreach ($conseiller[0]['planningArray'] as $userplanning) {
  170.             $extensionCode =  $conseiller[0]['userId'];
  171.             $userPseudo $conseiller[0]['userPseudo'];
  172.             $datePlan explode("T"$userplanning['date']);
  173.             $start $datePlan[0] . "T" $userplanning['begin'];
  174.             $end $datePlan[0] . "T" $userplanning['end'];
  175.             $planningEventId $userplanning['planningListId'];
  176.             switch ($userplanning['weekDayNum']) {
  177.                 case "0":
  178.                     $dayOfWeek "1";
  179.                     break;
  180.                 case "1":
  181.                     $dayOfWeek "2";
  182.                     break;
  183.                 case "2":
  184.                     $dayOfWeek "3";
  185.                     break;
  186.                 case "3":
  187.                     $dayOfWeek "4";
  188.                     break;
  189.                 case "4":
  190.                     $dayOfWeek "5";
  191.                     break;
  192.                 case "5":
  193.                     $dayOfWeek "6";
  194.                     break;
  195.                 case "6":
  196.                     $dayOfWeek "0";
  197.                     break;
  198.                 case null:
  199.                     $dayOfWeek "0";
  200.                     break;
  201.             }
  202.             $plan[] = [
  203.                 "id" => $userplanning['planningListId'],
  204.                 "title" => "Presence",
  205.                 "daysOfWeek" => $dayOfWeek,
  206.                 "weekDayNum" => $userplanning['weekDayNum'],
  207.                 "startTime" => $userplanning['begin'],
  208.                 "endTime" => $userplanning['end'],
  209.                 "userId" => $userplanning['userId'],
  210.                 "userPseudoId" => $userplanning['userPseudoId'],
  211.                 "resourceId" => $userplanning['userPseudoId'],
  212.                 $ressources[] = [
  213.                     "id" => $userplanning['userPseudoId'],
  214.                     "userId" => $userplanning['userId'],
  215.                     "title" =>  $userPseudo
  216.                 ]
  217.             ];
  218.         }
  219.         $newressources = [];
  220.         $ressources json_encode($ressources);
  221.         $date = new DateTime('now');
  222.         $date $date->format('Y-m-d');
  223.         $data json_encode($plan);
  224.         $avisForm $this->createForm(AvisType::class);
  225.         $avisForm->handleRequest($request);
  226.         if ($avisForm->isSubmitted() && $avisForm->isValid()) {
  227.             $avis =  $request->request->get('avis');
  228.             return $this->redirectToRoute('sendAvis', ['id' => $id'message' => $avis['message'], 'note' => $avis['note']]);
  229.         }
  230.         $avisFormMobile $this->createForm(AvisType::class);
  231.         $avisFormMobile->handleRequest($request);
  232.         if ($avisFormMobile->isSubmitted() && $avisFormMobile->isValid()) {
  233.             $avis =  $request->request->get('avis');
  234.             return $this->redirectToRoute('sendAvis', ['id' => $id'message' => $avis['message'], 'note' => $avis['note']]);
  235.         }
  236.         return $this->render('consultant/index.html.twig', [
  237.             'conseiller' => $conseiller,
  238.             'weekdaysShort' => $weekdaysShort,
  239.             'daysHoursShort' => $daysHoursShort,
  240.             'conseillerAvis' => $conseillerAvis,
  241.             'avisForm' => $avisForm->createView(),
  242.             'planningFormat' => 'HebdomadaireUtilisateur',
  243.             'data' => $data,
  244.             "date" => $date,
  245.             'clientId' => $clientId,
  246.             'ressources' => $ressources,
  247.             'planningEventId' => $planningEventId,
  248.             'avisFormMobile' => $avisFormMobile->createView()
  249.         ]);
  250.     }
  251.     /**
  252.      * @Route("/ping", name="ping", methods={"POST"})
  253.      */
  254.     public function ping(Mercure $mercure): Response
  255.     {
  256.         $topic 'https://star-voyance/mail';
  257.         $data = [0];
  258.         $mercure->mercurePost($topic$data);
  259.         return $this->redirectToRoute('app_home');
  260.     }
  261.     /**
  262.      * @Route("/sendAvis/{id}/{message}/{note}", name="sendAvis", methods={"GET", "POST"})
  263.      */
  264.     public function sendAvis(CallApiServices $callApiServiceCallApiTab $callApiTab$id$message$note): Response
  265.     {
  266.         $user $this->getUser();
  267.         $clientId 0;
  268.         if ($user) {
  269.             $clientId $user->getClientId();
  270.         }
  271.         $apiToken $user->getApiToken();
  272.         $serviceId $this->getParameter('app.serviceId');
  273.         $accountId $this->getParameter('app.accountId');
  274.         $conseiller $callApiService->conseillerEtPlanning($id$serviceId);
  275.         $date = new DateTime('now');
  276.         $sendAvisData = [
  277.             "clientId" => $clientId,
  278.             "serviceId" => $serviceId,
  279.             "complementId" => $id,
  280.             "userPseudoId" => $conseiller[0]['userPseudoId'],
  281.             "datePost" => $date->format(('Y:m:d'))  . " 00:00:00",
  282.             "commentaire" => $message,
  283.             "note" => $note
  284.         ];
  285.         $utilisateurSendAvisEndPoint $this->endpoint['clientAvisNoter'];
  286.         $utilisateurSendAvisTab $callApiTab->tab($apiToken$sendAvisData);
  287.         $utilisateurSendAvis $callApiService->postApi($utilisateurSendAvisEndPoint$utilisateurSendAvisTab);
  288.         return $this->redirectToRoute('app_consultant', [
  289.             'id' => $id,
  290.             'clientId' => $clientId
  291.         ]);
  292.     }
  293.     /**
  294.      * @Route("/consultants", name="app_all", methods={"GET", "POST"})
  295.      */
  296.     public function getAllConseiller(CallApiServices $callApiServicesRequest $request): Response
  297.     {
  298.         $user $this->getUser();
  299.         $clientId 0;
  300.         if ($user) {
  301.             $clientId $user->getClientId();
  302.         }
  303.         $serviceId $this->getParameter('app.serviceId');
  304.         $accountId $this->getParameter('app.accountId');
  305.         $conseillers $callApiServices->getListConseillers($accountId,  $serviceId);
  306.         $config $callApiServices->configuratationPlateforme($accountId,  $serviceId);
  307.         $session $request->getSession();
  308.         $config $session->get('configPlateforme');
  309.         return $this->render('home/allConseiller.html.twig', [
  310.             'conseillers' => $conseillers,
  311.             'config' => $config,
  312.             'clientId' => $clientId
  313.         ]);
  314.     }
  315. }