src/Controller/HomeController.php line 35

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