src/Controller/HomeController.php line 313

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\Request;
  5. use Symfony\Component\HttpFoundation\JsonResponse;
  6. use Symfony\Component\HttpFoundation\Session\Session;
  7. use Symfony\Component\HttpFoundation\Response;
  8. use Symfony\Component\Routing\Annotation\Route;
  9. use App\Entity\RefPoste;
  10. use App\Entity\RefRole;
  11. use App\Entity\UtilisateurInformation;
  12. use App\Entity\Conge;
  13. use App\Entity\DemandeReport;
  14. use App\Entity\FormationSession;
  15. use App\Entity\Workflow;
  16. use App\Entity\Utilisateur;
  17. use App\Entity\ListeDiffusion;
  18. use App\Entity\ListeDiffusionSup;
  19. use App\Entity\DocumentService;
  20. use App\Entity\Odm;
  21. use App\Entity\ProjetLettreMission;
  22. use App\Entity\RFederation;
  23. use App\Entity\RefAffectation;
  24. use Doctrine\Persistence\ManagerRegistry;
  25. /**
  26.  * Description of HomeController
  27.  *
  28.  * @author Maxime Dequant
  29.  */
  30. class HomeController extends AbstractController
  31. {
  32.     private ManagerRegistry $doctrine;
  33.     public function __construct(ManagerRegistry $doctrine)
  34.     {
  35.         $this->doctrine $doctrine;
  36.     }
  37.     #[Route(path'/api/home'name'ctsweb_front_homepage')]
  38.     public function Index(): \Symfony\Component\HttpFoundation\RedirectResponse
  39.     {
  40.         return $this->redirect('/_profiler');
  41.     }
  42.     #[Route(path'/api/modif_profil'name'ctsweb_modifier_profil')]
  43.     public function ModifierProfil(Request $request)
  44.     {
  45.         $success false;
  46.         $em $this->doctrine->getManager();
  47.         $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  48.         $request->request->replace(is_array($data) ? $data : []);
  49.         $dataRequest $request->request->all();
  50.         $address = ($dataRequest['address'] ?? null);
  51.         $telBur = ($dataRequest['phone'] ?? "");
  52.         $telPor = ($dataRequest['phoneMobile'] ?? "");
  53.         $email = ($dataRequest['email'] ?? "");
  54.         $scan = ($dataRequest['scan'] ?? "");
  55.         $error false;
  56.         if (!preg_match('/^[A-Za-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$/', (string) $email)) {
  57.             $error "L'adresse mail n'est pas correcte";
  58.         }
  59.         if ($telBur) {
  60.             if (!preg_match('/^0[1-5|8|9]\d{8}$/', (string) $telBur)) {
  61.                 $error "Le numéro de téléphone de bureau entré n'est pas valide";
  62.             }
  63.         }
  64.         if ($telPor) {
  65.             if (!preg_match('/^0(6|7)\d{8}$/', (string) $telPor)) {
  66.                 $error "Le numéro de téléphone portable entré n'est pas valide";
  67.             }
  68.         }
  69.         if (!$error) {
  70.             $utilisateurI $this->getUser();
  71.             $utilisateurI->getUtilisateur()->setCourriel($email);
  72.             $utilisateurInformation $this->GetUserInfos();
  73.             if ($telBur) {
  74.                 $utilisateurI->getUtilisateur()->setTelephoneBureau($telBur);
  75.             } else {
  76.                 $utilisateurI->getUtilisateur()->setTelephoneBureau(null);
  77.             }
  78.             if ($telPor) {
  79.                 $utilisateurI->getUtilisateur()->setTelephonePortable($telPor);
  80.             } else {
  81.                 $utilisateurI->getUtilisateur()->setTelephonePortable(null);
  82.             }
  83.             $utilisateurI->setAdresse($address);
  84.             $repositoryUI $this->doctrine->getManager()->getRepository(Utilisateur::class);
  85.             $utilisateurData $repositoryUI->find($utilisateurI->getIdUtilisateur());
  86.             $utilisateurData->setDateConnexion(date_format(new \DateTime(), "Y-m-d H:i:s"));
  87.             $em->persist($utilisateurI);
  88.             $em->flush();
  89.             $data = ['success' => $success true'data' => 'Votre profil a bien été modifié'];
  90.             return new JsonResponse($data);
  91.         } else {
  92.             $data = ['success' => $success false'data' => $error];
  93.         }
  94.         return new JsonResponse($data);
  95.     }
  96.     #[Route(path'/api/profil'name'ctsweb_front_profil')]
  97.     #[Route('/api/profil/{profil}'name'cts_get_profil_by_profil_id'methods: ['GET'])]
  98.     public function Profil(Utilisateur $profil null)
  99.     {
  100.         $repositoryUI $this->doctrine->getManager()->getRepository(UtilisateurInformation::class);
  101.         $uid $profil $profil->getIdUtilisateur() : $this->getUser()->getIdUtilisateur();
  102.         $session = new Session();
  103.        
  104.         $utilisateurData $repositoryUI->findDataForPageProfil($uid);
  105.         $affectation $utilisateurData['idAffectation'];
  106.         $repositoryRA $this->doctrine->getManager()->getRepository(RefAffectation::class);
  107.         $RefAffectationController $repositoryRA->findOneBy(["idAffectation" => $affectation]);
  108.         $congeScolaire $RefAffectationController->getCalendrierScolaire();
  109.         $dateBascule $RefAffectationController->getDateBascule();
  110.         $today = new \DateTime();
  111.         $today $today;
  112.         if ($today $dateBascule) {
  113.             $utilisateurData['calendrier_scolaire'] = $congeScolaire;
  114.         } else {
  115.             $utilisateurData['calendrier_scolaire'] = !$congeScolaire;
  116.         }
  117.         $tabDroitRef = [
  118.             RefRole::ROLE_DS_ADMINRefRole::ROLE_DS_INVITERefRole::ROLE_LECTEUR,
  119.             RefRole::ROLE_DRRefRole::ROLE_DS_SIGNATAIRERefRole::ROLE_DR_SIGNATAIRE
  120.         ];
  121.         if ($utilisateurData['path_scan'] != null) {
  122.             $utilisateurData['path_scan'] = "api/downloadScan/$utilisateurData[path_scan]";
  123.         }
  124.         if (in_array($utilisateurData['id_profil'], $tabDroitRef)) {
  125.             $utilisateurData['droitRefFederation'] = true;
  126.         }
  127.         $result = ['success' => true'data' => $utilisateurData];
  128.         $session->set('libFede'$utilisateurData['rSerLibl']);
  129.         $result['data']['idUtilisateur'] = $uid;
  130.    
  131.         return new JsonResponse($result);
  132.     }
  133.     #[Route(path'/api/informations_generales'name'ctsweb_informations_generales')]
  134.     function getInformationGenerales()
  135.     {
  136.         try {
  137.             $listData = [];
  138.             $role $this->getUser()->getUtilisateur()->getIdRole();
  139.             $today = new \DateTime();
  140.             if ($role != RefRole::ROLE_CTS) {
  141.                 $em $this->doctrine->getManager();
  142.                 $listCollaborateurs $em->getRepository(UtilisateurInformation::class)->findMyCollab($this->getUser());
  143.                 foreach ($listCollaborateurs as $listCollaborateur) {
  144.                     $affectionEntity $em
  145.                         ->getRepository(RefAffectation::class)
  146.                         ->findOneBy(["idAffectation" => $listCollaborateur['idAffectation']]);
  147.                     $congeScolaire = ($today >= $affectionEntity->getDateBascule()) ? $affectionEntity->getCalendrierScolaire() : !$affectionEntity->getCalendrierScolaire();
  148.                     $listUser[] = $listCollaborateur['idUtilisateur'];
  149.                     $telBureau = (string) $listCollaborateur['telephoneBureau'];
  150.                     $telPortable = (string) $listCollaborateur['telephonePortable'];
  151.                     $listData[] = ["civilite" => $listCollaborateur['civilite'], "login" => $listCollaborateur['login'], "dateNaissance" => $listCollaborateur['dateDeNaissance'], "telBureau" => $telBureau"telPortable" => $telPortable"nom" => $listCollaborateur['nom'], "prenom" => $listCollaborateur['prenom'], "grade" => $listCollaborateur['grade'], "indiceMajore" => $listCollaborateur['indiceMajore'], "dateFinDroits" => $listCollaborateur['dateFinDroits'], "adresse" => $listCollaborateur['adresse'], "uiFonctionCompl" => $listCollaborateur['uiFonctionCompl'], "uiCadreGeneral" => $listCollaborateur['uiCadreGeneral'], "pCivMatcle" => $listCollaborateur['pCivMatcle'], "libellePoste" => $listCollaborateur['libellePoste'], "libelleLong" => $listCollaborateur['libelleLong'], "rAdmDiside" => $listCollaborateur['rAdmDiside'], "rSerLibc" => $listCollaborateur['rSerLibc'], "rSerLibl" => $listCollaborateur['libelleCourtDiscipline'], "rSerIdent" => $listCollaborateur['affectation'], "idUtilisateur" => $listCollaborateur['idUtilisateur'], "courriel" => $listCollaborateur['courriel'], "droitLmUtilisateur" => $listCollaborateur['droit'], "idFederation" => $listCollaborateur['idFederation'], "idAffectation" => $listCollaborateur['idAffectation'], "idRole" => $listCollaborateur['IdRole'], "libelleFop" => $listCollaborateur['libelleFop'], "calendrierScolaire" => $congeScolaire];
  152.                 }
  153.             }
  154.             $data = ['success' => true'data' => $listData];
  155.         } catch (\Exception) {
  156.             $data = ['success' => false'data' => "Erreur de chargement"];
  157.         }
  158.         return new JsonResponse($data);
  159.     }
  160.     // #[Route(path: '/api/informations_generales', name: 'ctsweb_informations_generales')]
  161.     function InformationsGenerales(Request $request)
  162.     {
  163.         $repositoryU $this->doctrine->getManager()->getRepository(Utilisateur::class);
  164.         $repositoryUI $this->doctrine->getManager()->getRepository(UtilisateurInformation::class);
  165.         $perimetre $repositoryU->findPerimetreById($this->getUser()->getIdUtilisateur());
  166.         $droits $repositoryU->findDroitById($this->getUser()->getIdUtilisateur());
  167.         $role $this->getUser()->getUtilisateur()->getIdRole();
  168.         $CTSList $repositoryUI->getCtsInformationGeneralList(
  169.             ['affectation' => $this->getUser()->getIdAffectation() != null $this->getUser()->getIdAffectation()->getIdAffectation() : null'federation' => $this->getUser()->getIdFederation() != null $this->getUser()->getIdFederation()->getIdFederation() : null'droits' => $droits'perimetre' => $perimetre'role' => $role'AC' => $request->get('AC')]
  170.         );
  171.         $data = ['success' => true'data' => $CTSList];
  172.         return new JsonResponse($data);
  173.     }
  174.     #[Route(path'/api/menu'name'ctsweb_menu')]
  175.     public function Menu()
  176.     {
  177.         $role $this->getUser()->getUtilisateur()->getIdRole();
  178.         $menu = [];
  179.         $linkGCts "/v2/gerer-cts";
  180.         $menu[0] = ["libelle" => "Gérer mon activité""className" => "visible-md-inline-block visible-lg-inline-block""href" => "/gerer-mon-activites""actif" => $role == RefRole::ROLE_CTS || $role == RefRole::ROLE_FEDE"mobile" => true];
  181.         $menu[1] = ["libelle" => "Gérer les CTS""className" => "visible-md-inline-block visible-lg-inline-block""href" => $linkGCts"actif" => $role != RefRole::ROLE_CTS"sousMenuOdm" => $role == RefRole::ROLE_CTS null $this->getSousMenuCTSODM($role), "sousMenuConges" => $role == RefRole::ROLE_CTS null $this->getSousMenuCTSConges($role), "sousMenuLm" => $role == RefRole::ROLE_CTS null $this->getSousMenuCTSLM($role), "mobile" => true];
  182.         $menu[2] = ["libelle" => "Administration""className" => "visible-lg-inline-block""href" => "/administration""actif" => $role != RefRole::ROLE_CTS && $role != RefRole::ROLE_LECTEUR"mobile" => false];
  183.         $menu[3] = $this->getParameter('version');
  184.         return new JsonResponse($menu);
  185.     }
  186.     public function getSousMenuCTSODM($role)
  187.     {
  188.         $sousMenuCTSODM = [];
  189.         $sousMenuCTSODM[0] = ["libelle" => "Infos générales""lienActif" => 0"actif" => ($role != RefRole::ROLE_LECTEUR)];
  190.         $sousMenuCTSODM[1] = ["libelle" => "OM EN ATTENTE""lienActif" => ($role != RefRole::ROLE_DS_INVITE || $role != RefRole::ROLE_DR ||
  191.             $role != RefRole::ROLE_DS_SIGNATAIRE || $role != RefRole::ROLE_DR_SIGNATAIRE || $role != RefRole::ROLE_LECTEUR) ? 0"actif" => ($role != RefRole::ROLE_LECTEUR)];
  192.         // onglet désactivé
  193.         $sousMenuCTSODM[2] = [
  194.             "libelle" => "Signature OM",
  195.             "lienActif" => 0,
  196.             "actif" => 0,
  197.         ];
  198.         $sousMenuCTSODM[3] = ["libelle" => "Déplacements en cours""lienActif" => 0"actif" => ($role != RefRole::ROLE_LECTEUR)];
  199.         return $sousMenuCTSODM;
  200.     }
  201.     public function getSousMenuCTSConges($role)
  202.     {
  203.         $sousMenuCTSConges = [];
  204.         $sousMenuCTSConges[0] = ["libelle" => "Infos générales""lienActif" => 0"actif" => ($role != RefRole::ROLE_LECTEUR)];
  205.         $sousMenuCTSConges[1] = ["libelle" => "CONGES EN ATTENTE""lienActif" => ($role != RefRole::ROLE_DS_INVITE || $role != RefRole::ROLE_DR ||
  206.             $role != RefRole::ROLE_DS_SIGNATAIRE || $role != RefRole::ROLE_DR_SIGNATAIRE || $role != RefRole::ROLE_LECTEUR) ? 0"actif" => ($role != RefRole::ROLE_LECTEUR)];
  207.         $sousMenuCTSConges[2] = ["libelle" => "CONGES EN COURS""lienActif" => 0"actif" => ($role != RefRole::ROLE_LECTEUR)];
  208.         return $sousMenuCTSConges;
  209.     }
  210.     public function getSousMenuCTSLM($role)
  211.     {
  212.         $sousMenuCTSLM = [];
  213.         $sousMenuCTSLM[0] = ["libelle" => "OUTILS DES LM""lienActif" => 0"actif" => ($role != RefRole::ROLE_LECTEUR)];
  214.         $sousMenuCTSLM[1] = ["libelle" => "Projet de LM""lienActif" => 0"actif" => 1];
  215.         // onglet désactivé
  216.         $sousMenuCTSLM[2] = [
  217.             "libelle" => "Signature LM",
  218.             "lienActif" => 0,
  219.             "actif" => 0,
  220.         ];
  221.         $sousMenuCTSLM[3] = ["libelle" => "Lettres de missions""lienActif" => 0"actif" => 1];
  222.         return $sousMenuCTSLM;
  223.     }
  224.     #[Route(path'/api/modifier_password'name'ctsweb_modifier_password')]
  225.     public function ProfilPassword(Request $request)
  226.     {
  227.         $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  228.         $request->request->replace(is_array($data) ? $data : []);
  229.         $passwords $request->request->all();
  230.         $requestForm = [];
  231.         $uid $this->getUser()->getIdUtilisateur();
  232.         $repository $this->doctrine->getManager()->getRepository(UtilisateurInformation::class);
  233.         if ($passwords['password'] === $passwords['passwordrepeat']) {
  234.             if (preg_match('/^(?=(.*[a-z]){1,})(?=(.*[A-Z]){1,})(?=(.*[\d]){1,})(?=(.*[\W]){1,})(?!.*\s).{12,}$/', (string) $passwords['password'])) {
  235.                 $requestForm['password']['first'] = $passwords['password'];
  236.                 $requestForm['email'] = $this->getUser()->getUtilisateur()->getCourriel();
  237.                 $insertion $repository->changePassword($requestForm$uid);
  238.                 if ($insertion['error']) {
  239.                     $data = ['success' => false'data' => $insertion['retour']];
  240.                 } else {
  241.                     $data = ['success' => true'data' => $insertion['retour']];
  242.                 }
  243.             } else {
  244.                 $data = ['success' => false'data' => "Votre mot de passe doit avoir une longueur de 12 caractères minimum, contenant au moins un chiffre, une lettre minuscule, une lettre majuscule et un caractère spécial"];
  245.             }
  246.         } else {
  247.             $data = ['success' => false'data' => "Vous devez renseigner le même mot de passe sur les 2 champs"];
  248.         }
  249.         return new JsonResponse($data);
  250.     }
  251.     #[Route(path'/api/get_user_info'name'ctsweb_user_info')]
  252.     public function GetUserInfos()
  253.     {
  254.         $userInfo = ["nom" => $this->getUser()->getNom(), "prenom" => $this->getUser()->getPrenom()];
  255.         $data = ['success' => true'data' => $userInfo];
  256.         return new JsonResponse($data);
  257.     }
  258.     #[Route(path'/api/pastilles/{page}'name'ctsweb_get_pastilles')]
  259.     public function getPastilles($page)
  260.     {
  261.         $em $this->doctrine->getManager();
  262.         $repositoryO $em->getRepository(Odm::class);
  263.         $repositoryLD $em->getRepository(ListeDiffusion::class);
  264.         $repositoryLDS $em->getRepository(ListeDiffusionSup::class);
  265.         $repositoryPLM $em->getRepository(ProjetLettreMission::class);
  266.         $repositoryFS $em->getRepository(FormationSession::class);
  267.         $repositoryDOC $em->getRepository(DocumentService::class);
  268.         $user $this->getUser();
  269.         $userId $user->getIdUtilisateur();
  270.         $userRoleId $user->getUtilisateur()->getIdRole();
  271.         $nbOdmCTS $nbActuCTS $nbLmCTS $nbcongCTS $nbreCTS $nbFormationSessionUser $nbservicesCTS 0;
  272.         $nbOdmGA $nbActuGA $nbLmGa $nbcongGa $nbFormationSessionGA $nbservicesGA =  $nbreGa 0;
  273.         if ($page == 'ga') {
  274.             $nbOdmGA $repositoryO->countOdmPastille($userId);
  275.             $nbFormationSessionGA $repositoryFS->countformationPastille($userId);
  276.             $nbActuGA $repositoryLD->countArticleNotRead($userId);
  277.             $nbservicesGA $repositoryDOC->getdocumentprofil($user->getUtilisateur(), $user);
  278.             $nbcongGa count(
  279.                 $this->doctrine->getManager()
  280.                     ->getRepository(Conge::class)
  281.                     ->findBy(
  282.                         [
  283.                             'workflow' => [Workflow::CO_WAITING],
  284.                             'utilisateur' => $this->getUser()->getUtilisateur(),
  285.                         ],
  286.                         ['id' => 'desc']
  287.                     )
  288.             );
  289.             $nbreGa count(
  290.                 $this->doctrine->getManager()
  291.                     ->getRepository(DemandeReport::class)
  292.                     ->findBy(
  293.                         [
  294.                             'workflow' => [Workflow::RE_WAITING],
  295.                             'utilisateur' => $this->getUser()->getUtilisateur(),
  296.                         ],
  297.                         ['id' => 'desc']
  298.                     )
  299.             );
  300.             //Si rôle Fédération et poste DTN
  301.             if ($userRoleId == RefRole::ROLE_FEDE && $user->getIdPoste()->getIdPoste() == RefPoste::POSTE_DTN) {
  302.                $nbLmGa $repositoryPLM->countLmEnCoursExamenByUserDtnGA($userId);
  303.                 $nbservicesGA $repositoryDOC->getdocumentprofilFdDtn($user->getUtilisateur(), $user);
  304.                 $nbOdmGA $repositoryO->countOdmPastilleCts($userId);
  305.             } else {
  306.                 $nbLmGa $this->countLmByProfil();
  307.                 // $nbLmGa = $repositoryPLM->countLmEnCoursExamenByUser($userId);
  308.             }
  309.             if ($userRoleId == RefRole::ROLE_CTS) {
  310.                 $nbLmGa $this->countLmByProfil();
  311.                 $nbOdmGA $repositoryO->countOdmPastilleCts($userId);
  312.             }
  313.         }
  314.         //Rôle different de CTS
  315.         if ($page == 'gcts' && $userRoleId != RefRole::ROLE_CTS) {
  316.             $nbOdmCTS $this->countOdmPastillesByRoleUser();
  317.             $nbActuCTS $repositoryLDS->countListeDiffusionValide($userId);
  318.             $nbLmCTS $this->countLmByProfil();
  319.             $nbservicesCTS $repositoryDOC->getdocumentprofil($user->getUtilisateur(), $user);
  320.             $nbcongCTS $this->countconges('waiting');
  321.             $nbreCTS $this->countreport('waiting');
  322.             $nbFormationSessionUser $this->countformationByProfil();
  323.         }
  324.         if ($page == 'gcts' && $userRoleId == RefRole::ROLE_FEDE && $user->getIdPoste()->getIdPoste() == RefPoste::POSTE_DTN) {
  325.             $nbLmCTS $repositoryPLM->countLmEnCoursExamenByUserDtn($userId);
  326.         }
  327.         $pastilles = [
  328.             "GA" => ["ODM" => $nbOdmGA"ACTU" => $nbActuGA"LM" => $nbLmGa"conges" => $nbcongGa $nbreGa"formations" => $nbFormationSessionGA"services" => $nbservicesGA],
  329.             "CTS" => ["ODM" => $nbOdmCTS"ACTU" => $nbActuCTS"LM" => $nbLmCTS"conges" => $nbcongCTS $nbreCTS"formations" => $nbFormationSessionUser"services" => $nbservicesCTS]
  330.         ];
  331.         $data = ['success' => true'data' => $pastilles];
  332.         $response = new JsonResponse($data);
  333.         return $response;
  334.     }
  335.     private function countOdmPastillesByRoleUser()
  336.     {
  337.         $user $this->getUser();
  338.         $userRole $user->getUtilisateur()->getIdRole();
  339.         $em $this->doctrine->getManager();
  340.         $nbOfCollabs 0;
  341.         $idAffectation $user->getIdAffectation() == null $user->getIdAffectation()->getIdAffectation();
  342.         $idFederation $user->getIdFederation() == null null $user->getIdFederation()->getIdFederation();
  343.         $nbOfCollabs = match ($userRole) {
  344.             RefRole::ROLE_FEDERefRole::ROLE_FEDE_INVITE => $em->getRepository(Odm::class)->countCtsForFede($idFederation),
  345.             RefRole::ROLE_DR => $em->getRepository(Odm::class)->countCtsForDrOrDrs($idAffectationfalse),
  346.             RefRole::ROLE_DS_ADMINRefRole::ROLE_DS_INVITERefRole::ROLE_LECTEUR => $em->getRepository(Odm::class)->countCtsForDs($idAffectation),
  347.             RefRole::ROLE_DR_SIGNATAIRE => $em->getRepository(Odm::class)->countCtsForDrOrDrs($idAffectationtrue),
  348.             RefRole::ROLE_DS_SIGNATAIRE => $em->getRepository(Odm::class)->countCtsForDss($idAffectation),
  349.             default => $nbOfCollabs,
  350.         };
  351.         return $nbOfCollabs;
  352.     }
  353.     private function countLmByProfil()
  354.     {
  355.         $userRole $this->getUser()->getUtilisateur()->getIdRole();
  356.         $em $this->doctrine->getManager();
  357.         $nbOfLm 0;
  358.         $idAffectation $this->getUser()->getIdAffectation() == null $this->getUser()->getIdAffectation()->getIdAffectation();
  359.         switch ($userRole) {
  360.             case RefRole::ROLE_FEDE:
  361.             case RefRole::ROLE_FEDE_INVITE:
  362.                 $federation $this->getUser()->getIdFederation()->getIdFederation();
  363.                 $nbOfLm $em->getRepository(ProjetLettreMission::class)->countLmForDtn($federation);
  364.                 break;
  365.             case RefRole::ROLE_DR:
  366.                 $nbOfLm $em->getRepository(ProjetLettreMission::class)->countLmForDr($idAffectation);
  367.                 break;
  368.             case RefRole::ROLE_DS_ADMIN:
  369.             case RefRole::ROLE_DS_INVITE:
  370.             case RefRole::ROLE_LECTEUR:
  371.                 $nbOfLm $em->getRepository(ProjetLettreMission::class)->countLmForDsAndDsInv();
  372.                 break;
  373.             case RefRole::ROLE_DR_SIGNATAIRE:
  374.                 $nbOfLm $em->getRepository(ProjetLettreMission::class)->countLmForDrSignataire($idAffectation);
  375.                 break;
  376.             case RefRole::ROLE_DS_SIGNATAIRE:
  377.                 $nbOfLm $em->getRepository(ProjetLettreMission::class)->countLmForDsSignataire($idAffectation);
  378.                 break;
  379.             case RefRole::ROLE_CTS:
  380.                 $repositoryPLM $em->getRepository(ProjetLettreMission::class);
  381.                 $result $repositoryPLM->findProjetLettreMission($this->getUser()->getIdUtilisateur());
  382.                 if (!is_null($result))
  383.                     $nbOfLm 1;
  384.                 else
  385.                     $nbOfLm 0;
  386.                 break;
  387.         }
  388.         return $nbOfLm;
  389.     }
  390.     public function countreport(string $state)
  391.     {
  392.         $repositoryUI $this->doctrine->getManager()->getRepository(UtilisateurInformation::class);
  393.         $uid $this->getUser()->getIdUtilisateur();
  394.         $role $this->getUser()->getUtilisateur()->getIdRole();
  395.         if (!in_array($roleUtilisateur::MANAGE)) {
  396.             return new JsonResponse([], JsonResponse::HTTP_FORBIDDEN);
  397.         }
  398.         $states = ['current''waiting'];
  399.         if (!in_array($state$states)) {
  400.             return new JsonResponse([], JsonResponse::HTTP_BAD_REQUEST);
  401.         }
  402.         $entityManager $this->doctrine->getManager();
  403.         $affectation $this->getUser()->getIdAffectation();
  404.         $federation $this->getUser()->getIdFederation();
  405.         if ('waiting' == $state) {
  406.             $workflow Workflow::RE_WAITING;
  407.             //federation on
  408.             if (RefRole::ROLE_FEDE === $role || RefRole::ROLE_FEDE_INVITE === $role) {
  409.                 $affectation null;
  410.                 return 0;
  411.             } else if (RefRole::ROLE_DR === $role || RefRole::ROLE_DR_SIGNATAIRE === $role || RefRole::ROLE_GCR=== $role) {
  412.                 $federation null;
  413.             } else {
  414.                 $federation null;
  415.                 $affectation null;
  416.                 return 0;
  417.             }
  418.         } else {
  419.             $workflow Workflow::RE_SIGN;
  420.             if (RefRole::ROLE_FEDE === $role || RefRole::ROLE_FEDE_INVITE === $role) {
  421.                 $affectation null;
  422.             } else if (RefRole::ROLE_DR === $role || RefRole::ROLE_DR_SIGNATAIRE === $role || RefRole::ROLE_GCR=== $role) {
  423.                 $federation null;
  424.             } else {
  425.                 $affectation null;
  426.                 $federation null;
  427.             }
  428.         }
  429.         $avisDtn "avisDtn";
  430.         $conges $entityManager
  431.             ->getRepository(DemandeReport::class)
  432.             ->findByWorkflowAndUserType($workflow$federation$affectation$avisDtn);
  433.         return count($conges);
  434.     }
  435.     public function countconges(string $state)
  436.     {
  437.         $repositoryUI $this->doctrine->getManager()->getRepository(UtilisateurInformation::class);
  438.         $uid $this->getUser()->getIdUtilisateur();
  439.         $role $this->getUser()->getUtilisateur()->getIdRole();
  440.         if (!in_array($roleUtilisateur::MANAGE)) {
  441.             return new JsonResponse([], JsonResponse::HTTP_FORBIDDEN);
  442.         }
  443.         $states = ['current''waiting'];
  444.         if (!in_array($state$states)) {
  445.             return new JsonResponse([], JsonResponse::HTTP_BAD_REQUEST);
  446.         }
  447.         $entityManager $this->doctrine->getManager();
  448.         $affectation $this->getUser()->getIdAffectation();
  449.         $federation $this->getUser()->getIdFederation();
  450.         if ('waiting' == $state) {
  451.             $workflow Workflow::CO_WAITING;
  452.             //federation on
  453.             if (RefRole::ROLE_FEDE === $role || RefRole::ROLE_FEDE_INVITE === $role) {
  454.                 $affectation null;
  455.             } else if (RefRole::ROLE_DR === $role || RefRole::ROLE_DR_SIGNATAIRE === $role || RefRole::ROLE_GCR=== $role) {
  456.                 $federation null;
  457.             } else {
  458.                 $federation null;
  459.                 $affectation null;
  460.             }
  461.         } else {
  462.             $workflow Workflow::CO_ACCEPTED;
  463.             if (RefRole::ROLE_FEDE === $role || RefRole::ROLE_FEDE_INVITE === $role) {
  464.                 $affectation null;
  465.             } else if (RefRole::ROLE_DR === $role || RefRole::ROLE_DR_SIGNATAIRE === $role || RefRole::ROLE_GCR=== $role) {
  466.                 $federation null;
  467.             } else {
  468.                 $affectation null;
  469.                 $federation null;
  470.             }
  471.         }
  472.         $avisDtn "avisDtn";
  473.         $conges $entityManager
  474.             ->getRepository(Conge::class)
  475.             ->findByWorkflowAndUserType($workflow$federation$affectation$avisDtn);
  476.         return $this->countcongeAttente($conges);
  477.     }
  478.     private function countFormationByProfil()
  479.     {
  480.         $user $this->getUser();
  481.         $userRole $user->getUtilisateur()->getIdRole();
  482.         $em $this->doctrine->getManager();
  483.         $nbOfFo 0;
  484.         $idAffectation $user->getIdAffectation() == null $user->getIdAffectation()->getIdAffectation();
  485.         $idFederation $user->getIdFederation() == null null $user->getIdFederation()->getIdFederation();
  486.         $nbOfFo = match ($userRole) {
  487.             RefRole::ROLE_FEDERefRole::ROLE_FEDE_INVITE => $em->getRepository(FormationSession::class)->countFoForDtn($idFederation),
  488.             RefRole::ROLE_DR => $em->getRepository(FormationSession::class)->countFoForDr($idAffectation),
  489.             RefRole::ROLE_DS_ADMINRefRole::ROLE_DS_INVITERefRole::ROLE_LECTEUR => $em->getRepository(FormationSession::class)->countFoForDsAndDsInv($idAffectation),
  490.             RefRole::ROLE_DR_SIGNATAIRE => $em->getRepository(FormationSession::class)->countFoForDrSignataire($idAffectation),
  491.             RefRole::ROLE_DS_SIGNATAIRE => $em->getRepository(FormationSession::class)->countFoForDsSignataire($idAffectation),
  492.             default => $nbOfFo,
  493.         };
  494.         return $nbOfFo;
  495.     }
  496.     public function countformation(string $state)
  497.     {
  498.         $role $this->getUser()->getUtilisateur()->getIdRole();
  499.         if (!in_array($roleUtilisateur::MANAGE)) {
  500.             return new JsonResponse([], JsonResponse::HTTP_FORBIDDEN);
  501.         }
  502.         $states = ['current''waiting'];
  503.         if (!in_array($state$states)) {
  504.             return new JsonResponse([], JsonResponse::HTTP_BAD_REQUEST);
  505.         }
  506.         $entityManager $this->doctrine->getManager();
  507.         $affectation $this->getUser()->getIdAffectation();
  508.         $federation $this->getUser()->getIdFederation();
  509.         if ('waiting' == $state) {
  510.             $workflow Workflow::FO_EN_ATTENTE_DE_VALIDATION;
  511.             //federation on
  512.             if (RefRole::ROLE_FEDE === $role || RefRole::ROLE_FEDE_INVITE === $role) {
  513.                 $affectation null;
  514.             } else if (RefRole::ROLE_DR === $role || RefRole::ROLE_DR_SIGNATAIRE === $role) {
  515.                 $federation null;
  516.             } else {
  517.                 $federation null;
  518.                 $affectation null;
  519.             }
  520.         } else {
  521.             $workflow Workflow::FO_EN_ATTENTE_SIGNATURE;
  522.             if (RefRole::ROLE_FEDE === $role || RefRole::ROLE_FEDE_INVITE === $role) {
  523.                 $affectation null;
  524.             } else if (RefRole::ROLE_DR === $role || RefRole::ROLE_DR_SIGNATAIRE === $role) {
  525.                 $federation null;
  526.             } else {
  527.                 $affectation null;
  528.                 $federation null;
  529.             }
  530.         }
  531.         $formation $entityManager
  532.             ->getRepository(FormationSession::class)
  533.             ->findByWorkflowAndUserType($workflow$federation$affectation);
  534.         return is_countable($formation) ? count($formation) : 0;
  535.     }
  536.     private function countcongeAttente($conges)
  537.     {
  538.         $numbre 0;
  539.         $libelle "en attente pour validation";
  540.         foreach ($conges as $conge) {
  541.             if (strtolower($conge['libelleAction']) == $libelle) {
  542.                 $numbre++;
  543.             }
  544.         }
  545.         return $numbre;
  546.     }
  547.     private function conditionOfOdmUe($list)
  548.     {
  549.         $numbre 0;
  550.         foreach ($list as $odm) {
  551.             if ($odm['idPoste'] == || $odm['idPoste'] == 3) {
  552.                 $numbre++;
  553.             } else {
  554.                 if ($odm['euro'] == false) {
  555.                     $numbre++;
  556.                 }
  557.             }
  558.         }
  559.         return $numbre;
  560.     }
  561.     private function findFederation($rAdmDiside)
  562.     {
  563.         $em $this->doctrine->getManager();
  564.         $resultatFede $em->getRepository(RFederation::class)->findOneBy(['rAdmDiside' => $rAdmDiside]);
  565.         return $resultatFede;
  566.     }
  567.     #[Route(path'/api/get_navigation_type_agenda'name'cts_get_favoris_navigation')]
  568.     public function getNavigationType()
  569.     {
  570.         $idUser $this->getUser()->getIdUtilisateur();
  571.         $em $this->doctrine->getManager();
  572.         $utilisateurInformation $em->getRepository(UtilisateurInformation::class)->findOneBy(['idUtilisateur' => $idUser]);
  573.         $navigation "";
  574.         if ($utilisateurInformation instanceof UtilisateurInformation) {
  575.             $navigation $utilisateurInformation->getNavigation();
  576.         }
  577.         $data = ['success' => true'data' => $navigation];
  578.         return new JsonResponse($data);
  579.     }
  580.     #[Route(path'/api/post_navigation_type_agenda'name'cts_post_favoris_navigation')]
  581.     public function setNavigationType(Request $request)
  582.     {
  583.         $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  584.         $request->request->replace(is_array($data) ? $data : []);
  585.         $params $request->request->all();
  586.         $idUser $this->getUser()->getIdUtilisateur();
  587.         $em $this->doctrine->getManager();
  588.         $utilisateurInformation $em->getRepository(UtilisateurInformation::class)->findOneBy(['idUtilisateur' => $idUser]);
  589.         $succes false;
  590.         if ($utilisateurInformation instanceof UtilisateurInformation) {
  591.             $utilisateurInformation->setNavigation($params['typeAgenda']);
  592.             $em->persist($utilisateurInformation);
  593.             $em->flush();
  594.             $succes true;
  595.         }
  596.         return new JsonResponse(['success' => $succes]);
  597.     }
  598.     #[Route(path'/api/masterController.js'name'cts_master_controller')]
  599.     public function myInitialMasterController()
  600.     {
  601.         try {
  602.             $path $this->getParameter('web_dir');
  603.             $content file_get_contents("$path/ui/js/controller/masterController.js");
  604.            // $content = sprintf($content, $this->Menu()->getContent(), $this->Profil()->getContent(), $this->forward('App:Agenda:GetColorAgenda')->getContent(), $this->forward('App:CreationEvenement:GetConsulterAction')->getContent());
  605.            $content sprintf(
  606.             $content,
  607.             $this->Menu()->getContent(),
  608.             $this->Profil()->getContent(),
  609.             $this->forward('App\Controller\AgendaController::GetColorAgenda')->getContent(),
  610.             $this->forward('App\Controller\CreationEvenementController::GetConsulterAction')->getContent()
  611.         );
  612.         
  613.             $response = new Response(
  614.                 $content,
  615.                 Response::HTTP_OK,
  616.                 ['Content-Type' => 'application/javascript''Content-Length' => strlen($content), 'Content-Disposition' => 'attachment;filename=masterController.js''Accept-Ranges' => 'bytes']
  617.             );
  618.         } catch (\Exception $e) {
  619.             $response = new Response(
  620.                 $e->getMessage(),
  621.                 Response::HTTP_INTERNAL_SERVER_ERROR
  622.             );
  623.         }
  624.         return $response;
  625.     }
  626. }