src/Repository/UtilisateurInformationRepository.php line 846

Open in your IDE?
  1. <?php
  2. namespace App\Repository;
  3. use App\Entity\CongeDroitAnnuel;
  4. use App\Entity\LettreMission;
  5. use App\Entity\Odm;
  6. use App\Entity\Conge;
  7. use App\Entity\RefAffectation;
  8. use App\Entity\RefFederation;
  9. use App\Entity\RefRole;
  10. use App\Entity\Utilisateur;
  11. use App\Entity\UtilisateurInformation;
  12. use App\Entity\Workflow;
  13. use Doctrine\ORM\EntityRepository;
  14. use Symfony\Bridge\Doctrine\Security\User\UserLoaderInterface;
  15. use App\Entity\RefAffectationCalendrier;
  16. /**
  17.  * UtilisateurInformationRepository
  18.  *
  19.  * This class was generated by the Doctrine ORM. Add your own custom
  20.  * repository methods below.
  21.  */
  22. class UtilisateurInformationRepository extends EntityRepository implements UserLoaderInterface
  23. {
  24.     function remove_accents($string)
  25.     {
  26.         if (!preg_match('/[\x80-\xff]/'$string))
  27.             return $string;
  28.         $chars = [
  29.             // Decompositions for Latin-1 Supplement
  30.             chr(195) . chr(128) => 'A',
  31.             chr(195) . chr(129) => 'A',
  32.             chr(195) . chr(130) => 'A',
  33.             chr(195) . chr(131) => 'A',
  34.             chr(195) . chr(132) => 'A',
  35.             chr(195) . chr(133) => 'A',
  36.             chr(195) . chr(135) => 'C',
  37.             chr(195) . chr(136) => 'E',
  38.             chr(195) . chr(137) => 'E',
  39.             chr(195) . chr(138) => 'E',
  40.             chr(195) . chr(139) => 'E',
  41.             chr(195) . chr(140) => 'I',
  42.             chr(195) . chr(141) => 'I',
  43.             chr(195) . chr(142) => 'I',
  44.             chr(195) . chr(143) => 'I',
  45.             chr(195) . chr(145) => 'N',
  46.             chr(195) . chr(146) => 'O',
  47.             chr(195) . chr(147) => 'O',
  48.             chr(195) . chr(148) => 'O',
  49.             chr(195) . chr(149) => 'O',
  50.             chr(195) . chr(150) => 'O',
  51.             chr(195) . chr(153) => 'U',
  52.             chr(195) . chr(154) => 'U',
  53.             chr(195) . chr(155) => 'U',
  54.             chr(195) . chr(156) => 'U',
  55.             chr(195) . chr(157) => 'Y',
  56.             chr(195) . chr(159) => 's',
  57.             chr(195) . chr(160) => 'a',
  58.             chr(195) . chr(161) => 'a',
  59.             chr(195) . chr(162) => 'a',
  60.             chr(195) . chr(163) => 'a',
  61.             chr(195) . chr(164) => 'a',
  62.             chr(195) . chr(165) => 'a',
  63.             chr(195) . chr(167) => 'c',
  64.             chr(195) . chr(168) => 'e',
  65.             chr(195) . chr(169) => 'e',
  66.             chr(195) . chr(170) => 'e',
  67.             chr(195) . chr(171) => 'e',
  68.             chr(195) . chr(172) => 'i',
  69.             chr(195) . chr(173) => 'i',
  70.             chr(195) . chr(174) => 'i',
  71.             chr(195) . chr(175) => 'i',
  72.             chr(195) . chr(177) => 'n',
  73.             chr(195) . chr(178) => 'o',
  74.             chr(195) . chr(179) => 'o',
  75.             chr(195) . chr(180) => 'o',
  76.             chr(195) . chr(181) => 'o',
  77.             chr(195) . chr(182) => 'o',
  78.             chr(195) . chr(182) => 'o',
  79.             chr(195) . chr(185) => 'u',
  80.             chr(195) . chr(186) => 'u',
  81.             chr(195) . chr(187) => 'u',
  82.             chr(195) . chr(188) => 'u',
  83.             chr(195) . chr(189) => 'y',
  84.             chr(195) . chr(191) => 'y',
  85.             // Decompositions for Latin Extended-A
  86.             chr(196) . chr(128) => 'A',
  87.             chr(196) . chr(129) => 'a',
  88.             chr(196) . chr(130) => 'A',
  89.             chr(196) . chr(131) => 'a',
  90.             chr(196) . chr(132) => 'A',
  91.             chr(196) . chr(133) => 'a',
  92.             chr(196) . chr(134) => 'C',
  93.             chr(196) . chr(135) => 'c',
  94.             chr(196) . chr(136) => 'C',
  95.             chr(196) . chr(137) => 'c',
  96.             chr(196) . chr(138) => 'C',
  97.             chr(196) . chr(139) => 'c',
  98.             chr(196) . chr(140) => 'C',
  99.             chr(196) . chr(141) => 'c',
  100.             chr(196) . chr(142) => 'D',
  101.             chr(196) . chr(143) => 'd',
  102.             chr(196) . chr(144) => 'D',
  103.             chr(196) . chr(145) => 'd',
  104.             chr(196) . chr(146) => 'E',
  105.             chr(196) . chr(147) => 'e',
  106.             chr(196) . chr(148) => 'E',
  107.             chr(196) . chr(149) => 'e',
  108.             chr(196) . chr(150) => 'E',
  109.             chr(196) . chr(151) => 'e',
  110.             chr(196) . chr(152) => 'E',
  111.             chr(196) . chr(153) => 'e',
  112.             chr(196) . chr(154) => 'E',
  113.             chr(196) . chr(155) => 'e',
  114.             chr(196) . chr(156) => 'G',
  115.             chr(196) . chr(157) => 'g',
  116.             chr(196) . chr(158) => 'G',
  117.             chr(196) . chr(159) => 'g',
  118.             chr(196) . chr(160) => 'G',
  119.             chr(196) . chr(161) => 'g',
  120.             chr(196) . chr(162) => 'G',
  121.             chr(196) . chr(163) => 'g',
  122.             chr(196) . chr(164) => 'H',
  123.             chr(196) . chr(165) => 'h',
  124.             chr(196) . chr(166) => 'H',
  125.             chr(196) . chr(167) => 'h',
  126.             chr(196) . chr(168) => 'I',
  127.             chr(196) . chr(169) => 'i',
  128.             chr(196) . chr(170) => 'I',
  129.             chr(196) . chr(171) => 'i',
  130.             chr(196) . chr(172) => 'I',
  131.             chr(196) . chr(173) => 'i',
  132.             chr(196) . chr(174) => 'I',
  133.             chr(196) . chr(175) => 'i',
  134.             chr(196) . chr(176) => 'I',
  135.             chr(196) . chr(177) => 'i',
  136.             chr(196) . chr(178) => 'IJ',
  137.             chr(196) . chr(179) => 'ij',
  138.             chr(196) . chr(180) => 'J',
  139.             chr(196) . chr(181) => 'j',
  140.             chr(196) . chr(182) => 'K',
  141.             chr(196) . chr(183) => 'k',
  142.             chr(196) . chr(184) => 'k',
  143.             chr(196) . chr(185) => 'L',
  144.             chr(196) . chr(186) => 'l',
  145.             chr(196) . chr(187) => 'L',
  146.             chr(196) . chr(188) => 'l',
  147.             chr(196) . chr(189) => 'L',
  148.             chr(196) . chr(190) => 'l',
  149.             chr(196) . chr(191) => 'L',
  150.             chr(197) . chr(128) => 'l',
  151.             chr(197) . chr(129) => 'L',
  152.             chr(197) . chr(130) => 'l',
  153.             chr(197) . chr(131) => 'N',
  154.             chr(197) . chr(132) => 'n',
  155.             chr(197) . chr(133) => 'N',
  156.             chr(197) . chr(134) => 'n',
  157.             chr(197) . chr(135) => 'N',
  158.             chr(197) . chr(136) => 'n',
  159.             chr(197) . chr(137) => 'N',
  160.             chr(197) . chr(138) => 'n',
  161.             chr(197) . chr(139) => 'N',
  162.             chr(197) . chr(140) => 'O',
  163.             chr(197) . chr(141) => 'o',
  164.             chr(197) . chr(142) => 'O',
  165.             chr(197) . chr(143) => 'o',
  166.             chr(197) . chr(144) => 'O',
  167.             chr(197) . chr(145) => 'o',
  168.             chr(197) . chr(146) => 'OE',
  169.             chr(197) . chr(147) => 'oe',
  170.             chr(197) . chr(148) => 'R',
  171.             chr(197) . chr(149) => 'r',
  172.             chr(197) . chr(150) => 'R',
  173.             chr(197) . chr(151) => 'r',
  174.             chr(197) . chr(152) => 'R',
  175.             chr(197) . chr(153) => 'r',
  176.             chr(197) . chr(154) => 'S',
  177.             chr(197) . chr(155) => 's',
  178.             chr(197) . chr(156) => 'S',
  179.             chr(197) . chr(157) => 's',
  180.             chr(197) . chr(158) => 'S',
  181.             chr(197) . chr(159) => 's',
  182.             chr(197) . chr(160) => 'S',
  183.             chr(197) . chr(161) => 's',
  184.             chr(197) . chr(162) => 'T',
  185.             chr(197) . chr(163) => 't',
  186.             chr(197) . chr(164) => 'T',
  187.             chr(197) . chr(165) => 't',
  188.             chr(197) . chr(166) => 'T',
  189.             chr(197) . chr(167) => 't',
  190.             chr(197) . chr(168) => 'U',
  191.             chr(197) . chr(169) => 'u',
  192.             chr(197) . chr(170) => 'U',
  193.             chr(197) . chr(171) => 'u',
  194.             chr(197) . chr(172) => 'U',
  195.             chr(197) . chr(173) => 'u',
  196.             chr(197) . chr(174) => 'U',
  197.             chr(197) . chr(175) => 'u',
  198.             chr(197) . chr(176) => 'U',
  199.             chr(197) . chr(177) => 'u',
  200.             chr(197) . chr(178) => 'U',
  201.             chr(197) . chr(179) => 'u',
  202.             chr(197) . chr(180) => 'W',
  203.             chr(197) . chr(181) => 'w',
  204.             chr(197) . chr(182) => 'Y',
  205.             chr(197) . chr(183) => 'y',
  206.             chr(197) . chr(184) => 'Y',
  207.             chr(197) . chr(185) => 'Z',
  208.             chr(197) . chr(186) => 'z',
  209.             chr(197) . chr(187) => 'Z',
  210.             chr(197) . chr(188) => 'z',
  211.             chr(197) . chr(189) => 'Z',
  212.             chr(197) . chr(190) => 'z',
  213.             chr(197) . chr(191) => 's',
  214.         ];
  215.         $string strtr($string$chars);
  216.         return $string;
  217.     }
  218.     /**
  219.      * Requête de base pour récupérer un utilisateur par nom, prénom et mail
  220.      * @return \Doctrine\ORM\QueryBuilder
  221.      */
  222.     private function baseQueryFindUserByParams(array $requestForm)
  223.     {
  224.         $nom $requestForm['nom'];
  225.         $prenom $requestForm['prenom'];
  226.         //$mail = $requestForm['courriel'];
  227.         $dateDeNaissance $requestForm['dateDeNaissance'] ?? '';
  228.         $dtNaissance \DateTime::createFromFormat('d/m/Y'$dateDeNaissance);
  229.         $query $this->createQueryBuilder('a')
  230.             ->leftJoin('a.utilisateur''b')
  231.             ->select("a.nom, a.prenom, b.courriel, a.login, a.idInformationPersonnelle, a.dateDeNaissance")
  232.             //->where('b.courriel = :courriel')
  233.             ->andWhere('a.utilisateurActif = true')
  234.             ->andWhere('a.dateDeNaissance = :dateDeNaissance')
  235.             //->setParameter('courriel', $mail)
  236.             ->setParameter('dateDeNaissance'$dtNaissance->format('Y-m-d'));
  237.         //->setParameter('nom', $nom)
  238.         //->setParameter('prenom', $prenom);
  239.         return $query;
  240.     }
  241.     /**
  242.      * Récupération de l'identifiant d'un utilisateur selon nom, prénom, login
  243.      * @return array
  244.      */
  245.     public function retrieveUserLogin(array $requestForm)
  246.     {
  247.         $query $this->baseQueryFindUserByParams($requestForm);
  248.         $users $query->getQuery()->getResult();
  249.         $nom str_replace("-"" "strtoupper((string) $this->remove_accents($requestForm['nom'])));
  250.         $prenom str_replace("-"" "strtoupper((string) $this->remove_accents($requestForm['prenom'])));
  251.         $email $requestForm['courriel'];
  252.         $found null;
  253.         foreach ($users as $user) {
  254.             if (
  255.                 $nom == str_replace("-"" "strtoupper((string) $this->remove_accents($user['nom'])))
  256.                 && $prenom == str_replace("-"" "strtoupper((string) $this->remove_accents($user['prenom'])))
  257.                 && $email == $user['courriel']
  258.             ) {
  259.                 $found $user;
  260.                 break;
  261.             }
  262.         }
  263.         if (!empty($found) && isset($requestForm['courriel']) && !empty($requestForm['courriel'])) {
  264.             return ['error' => 0'message' => $found['login']];
  265.         } else {
  266.             return ['error' => 1'message' => "Votre compte n’a pas été reconnu.<br/> Veuillez saisir les informations Nom, prénom, date de naissance, adresse e-mail, telles qu’elles ont été enregistrées dans votre compte."];
  267.         }
  268.     }
  269.     /**
  270.      * Réinitialisation d'un mot de passe
  271.      * @return array
  272.      */
  273.     public function findUserReinitialize(array $requestForm)
  274.     {
  275.         $email $requestForm['courriel'];
  276.         $query $this->baseQueryFindUserByParams($requestForm);
  277.         $users $query->getQuery()->getResult();
  278.         $nom str_replace("-"" "strtoupper((string) $this->remove_accents($requestForm['nom'])));
  279.         $prenom str_replace("-"" "strtoupper((string) $this->remove_accents($requestForm['prenom'])));
  280.         $found null;
  281.         foreach ($users as $user) {
  282.             if (
  283.                 $nom == str_replace("-"" "strtoupper((string) $this->remove_accents($user['nom'])))
  284.                 && $prenom == str_replace("-"" "strtoupper((string) $this->remove_accents($user['prenom'])))
  285.                 && $email == $user['courriel']
  286.             ) {
  287.                 $found $user;
  288.                 break;
  289.             }
  290.         }
  291.         if (!empty($found) && $email != '') {
  292.             $user $found;
  293.             $tmpPassword $this->randomPassword(8);
  294.             $tokenUpdatePwd uniqid(time());
  295.             // $utilisateur = $this->_em->find("App\Entity\UtilisateurInformation", $user['idInformationPersonnelle']);
  296.             $utilisateur $this->_em->getRepository(UtilisateurInformation::class)->find($user['idInformationPersonnelle']);
  297.             //$utilisateur->getUtilisateur()->setDateConnexion(null);
  298.             $utilisateur->setPassword(hash('sha256'$tmpPassword));
  299.             $utilisateur->setJetonMdp($tokenUpdatePwd);
  300.             $utilisateur->setCourrielMdp($email);
  301.             $this->_em->flush();
  302.             return ['error' => 0'message' => '''user' => ["username" => $user['login'], "password" => $tmpPassword"email" => $email"tokenUpdatePwd" => $tokenUpdatePwd"nom" => $user['nom'], "prenom" => $user['prenom'], "date" => date_format($user['dateDeNaissance'], 'd/m/Y')]];
  303.         } else {
  304.             return ['error' => 1'message' => "Votre compte n’a pas été reconnu. Veuillez saisir les informations Nom, prénom, date de naissance, adresse e-mail, telles qu’elles ont été enregistrées dans votre compte."];
  305.         }
  306.     }
  307.     public function findFirstConnection($idUtilisateur)
  308.     {
  309.         $query $this->createQueryBuilder('a')
  310.             ->leftJoin('a.utilisateur''b');
  311.         $query->select("b.dateConnexion")
  312.             ->where('a.idUtilisateur = :idUtilisateur')
  313.             ->setParameter('idUtilisateur'$idUtilisateur);
  314.         if (!empty($query->getQuery()->getResult())) {
  315.             return $query->getQuery()->getResult()[0]['dateConnexion'];
  316.         }
  317.     }
  318.     public function changePassword(array $requestForm$idUtilisateur)
  319.     {
  320.         $return = [];
  321.         $first_password $requestForm['password']['first'];
  322.         //$second_password = $requestForm['password']['second'];
  323.         $query $this->createQueryBuilder('a')
  324.             ->leftJoin('a.utilisateur''b');
  325.         $query->select("b.courriel, a.idInformationPersonnelle")
  326.             ->andWhere('a.idUtilisateur = :idUtilisateur')
  327.             ->setParameter('idUtilisateur'$idUtilisateur);
  328.         if (!empty($query->getQuery()->getResult())) {
  329.             $queryResult $query->getQuery()->getResult()[0];
  330.             // $utilisateur = $this->_em->find(
  331.             //     "App\Entity\UtilisateurInformation",
  332.             //     $queryResult['idInformationPersonnelle']
  333.             // );
  334.             $utilisateur $this->_em->getRepository(UtilisateurInformation::class)->find($queryResult['idInformationPersonnelle']);
  335.             $utilisateur->setPassword(hash('sha256', (string) $first_password));
  336.             $dateNow = (new \DateTime())->setTimezone(new \DateTimeZone('Europe/Paris'));
  337.             $utilisateur->setDateMajMdp($dateNow);
  338.             $this->_em->flush();
  339.             $return['error'] = 0;
  340.             $return['retour'] = "Votre mot de passe a bien été modifié";
  341.         } else {
  342.             $return['error'] = 1;
  343.             $return['retour'] = "Echec d’identification. Veuillez contacter la direction des sports, centre de gestion opérationnelle des CTS";
  344.         }
  345.         return $return;
  346.     }
  347.     /**
  348.      * Mettre à jour le mot de passe de l'utilisateur
  349.      * @return mixed
  350.      */
  351.     public function updatePassword(array $requestForm$tokenPwd)
  352.     {
  353.         // $tmpPassword = isset($requestForm['tmpPassword']) ? $requestForm['tmpPassword'] : '';
  354.         $firstPassword $requestForm['password']['first'] ?? '';
  355.         //  $email =  isset($requestForm['email']) ? $requestForm['email'] : '';
  356.         $query $this->createQueryBuilder('a')
  357.             ->select("a.idInformationPersonnelle")
  358.             ->andWhere('a.utilisateurActif = true')
  359.             ->andWhere('a.jetonMdp = :jetonMdp')
  360.             ->setParameter('jetonMdp'$tokenPwd);
  361.         if (!empty($query->getQuery()->getResult())) {
  362.             $queryResult $query->getQuery()->getResult()[0];
  363.             $utilisateur $this->_em->getRepository(UtilisateurInformation::class)->find($queryResult['idInformationPersonnelle']);
  364.             $utilisateur->setPassword(hash('sha256', (string) $firstPassword));
  365.             //Supprimer le jeton et le courriel de récupération
  366.             $dateNow = (new \DateTime())->setTimezone(new \DateTimeZone('Europe/Paris'));
  367.             $utilisateur->setDateMajMdp($dateNow);
  368.             $utilisateur->setJetonMdp(null);
  369.             $utilisateur->setCourrielMdp(null);
  370.             $this->_em->flush();
  371.             return ['error' => 0'message' => 'Votre mot de passe a bien été modifié'];
  372.         } else {
  373.             return ['error' => 1'message' => 'Echec d’identification. Veuillez contacter la direction des sports, centre de gestion opérationnelle des CTS'];
  374.         }
  375.     }
  376.     public function updatePasswordWithoutToken($newHashedPassword$user) {
  377.         $user->setPassword($newHashedPassword);
  378.         $dateNow = (new \DateTime())->setTimezone(new \DateTimeZone('Europe/Paris'));
  379.         $user->setDateMajMdp($dateNow);
  380.         $this->_em->flush();
  381.         return array('error' => 0'message' => 'Votre mot de passe a bien été modifié');
  382.     }
  383.     public function verifOldPassword(array $requestForm,  $user)
  384.     {
  385.         // $tmpPassword = isset($requestForm['tmpPassword']) ? $requestForm['tmpPassword'] : '';
  386.         $firstPassword $requestForm['oldPassword'] ?? '';
  387.         $oldPWhash('sha256', (string) $firstPassword);
  388.         //  $email =  isset($requestForm['email']) ? $requestForm['email'] : '';
  389.         $id_information =$user->getIdInformationPersonnelle();
  390.         $query $this->createQueryBuilder('a')
  391.             ->select("a.idInformationPersonnelle")
  392.             ->andWhere('a.utilisateurActif = true')
  393.             ->andWhere('a.idInformationPersonnelle = :id_information')
  394.             ->andWhere('a.motDePasse = :password')
  395.             ->setParameter('password'$oldPW)
  396.             ->setParameter('id_information',  $id_information);
  397.         if (!empty($query->getQuery()->getResult())) {
  398.             return ['error' => 0];
  399.         } else {
  400.             return ['error' => 1'message' => "L'ancien mot de passe n'est pas correct."];
  401.         }
  402.     }
  403.     /**
  404.      * Vérification de la validation du jeton
  405.      *
  406.      * @param string $jeton
  407.      * @return boolean
  408.      */
  409.     public function isValidToken($token)
  410.     {
  411.         $query $this->createQueryBuilder('a');
  412.         $query->select("a.idInformationPersonnelle")
  413.             ->andWhere('a.jetonMdp = :token')
  414.             ->setParameter('token'$token);
  415.         $user $query->getQuery()->getOneOrNullResult();
  416.         return !is_null($user);
  417.     }
  418.     public function checkUserPassword($iduser, array $requestForm)
  419.     {
  420.         $return = [];
  421.         $return['error'] = 0;
  422.         $oldPW $requestForm['oldpassword'];
  423.         $query $this->createQueryBuilder('a')
  424.             ->leftJoin('a.utilisateur''b');
  425.         $query->select("a.login, a.idInformationPersonnelle")
  426.             ->where('a.idUtilisateur = :idutilisateur')
  427.             ->setParameter(':idutilisateur'$iduser)
  428.             ->andWhere('a.motDePasse = :password')
  429.             ->setParameter('password'$oldPW);
  430.         if (empty($query->getQuery()->getResult())) {
  431.             $return['error'] = 1;
  432.             $return['retour'] = "L'ancien mot de passe n'est pas correct.";
  433.         }
  434.         return $return;
  435.     }
  436.     function findDataForPageProfil($id_user)
  437.     {
  438.         $query $this->createQueryBuilder('ui')
  439.             ->innerJoin('ui.utilisateur''u')
  440.             ->innerJoin('u.role''r')
  441.             ->leftJoin('App\Entity\LettreMission''lm''WITH''lm.idUtilisateur = ui.idUtilisateur AND lm.signataire IS NOT NULL')
  442.             ->leftJoin('lm.idFop''fop')
  443.             ->leftJoin('ui.idFop''fopComp')
  444.             ->leftJoin('ui.idFoprinci''foprinci')
  445.             ->leftJoin('ui.idOdmCadreGeneral''cg')
  446.             ->leftJoin('ui.idLieu''lieu')
  447.             ->leftJoin('ui.idFederation''reff')
  448.             ->leftJoin('App\Entity\RFederation''rf''WITH''rf.rAdmDiside = reff.rAdmDiside')
  449.             ->leftJoin('ui.idAffectation''aff')
  450.             ->leftJoin('ui.idPoste''pos')
  451.             ->leftJoin('ui.scan''sc');
  452.         $query->select('ui.idUtilisateur, ui.civilite,u.idRole id_profil,ui.nom, ui.prenom, ui.dateDeNaissance, u.courriel, u.telephoneBureau, '
  453.             'u.telephonePortable, ui.adresse, ui.login, u.pCivMatcle, pos.idPoste , pos.libellePoste, ui.fonction, ui.grade, ui.indiceMajore, ui.dateFinDroits, '
  454.             'fopComp.libelleFop as libelleFopComp, fop.libelleFop as libelleFop, foprinci.libelleFop as libelleFopUi, '
  455.             'aff.libelleAffectation, aff.libelleLong AS affectationLong, rf.rSerLibl, aff.idAffectation, ui.token, cg.idOdmCadreGeneral, cg.libelleOdmCadreGeneral,'
  456.             'reff.idFederation, reff.saisonSportiveFederation, r.libelleRole,ui.grade,ui.indiceMajore, reff.droitRefFederation,'
  457.             'sc.path as path_scan, sc.id as id_scan, lieu.idLieu,lm.dateFin,lm.dateDeSignature')
  458.             ->where('ui.idUtilisateur = :id_user')
  459.             ->setParameter(':id_user'$id_user)
  460.             ->orderBy('lm.dateDeSignature''DESC');
  461.         $res $query->getQuery()->getResult();
  462.         $res[0]['dateDeNaissance'] = $res[0]['dateDeNaissance']->format('d/m/Y');
  463.         $res[0]['dateFinDroits'] = $res[0]['dateFinDroits'] ? $res[0]['dateFinDroits']->format('d/m/Y') : '';
  464.         $res[0]['libelleFop'] = ((isset($res[0]['libelleFop'])) && (null != $res[0]['libelleFop'])) ? $res[0]['libelleFop'] : $res[0]['libelleFopUi'];
  465.         // $res[0]['libelleFop'] = (null != $res[0]['fop.libelleFop'])?$res[0]['fop.libelleFop']:$res[0]['libellePoste'];
  466.         // $res[0]['libelleFop'] = ((isset($res[0]['fop.libelleFop']))&&(null != $res[0]['fop.libelleFop']))?$res[0]['fop.libelleFop']:$res[0]['libelleFopUi'];
  467.         return $res[0];
  468.     }
  469.     public function addTentative($login)
  470.     {
  471.         $query $this->createQueryBuilder('a');
  472.         $query->select("a.tentative, a.idInformationPersonnelle")
  473.             ->where('a.login = :login')
  474.             ->setParameter(':login'$login);
  475.         if (!empty($query->getQuery()->getResult())) {
  476.             $queryResult $query->getQuery()->getResult()[0];
  477.             $tentative $queryResult['tentative'];
  478.             // $utilisateur = $this->_em->find(
  479.             //     "App\Entity\UtilisateurInformation",
  480.             //     $queryResult['idInformationPersonnelle']
  481.             // );
  482.             $utilisateur $this->_em->getRepository(UtilisateurInformation::class)->find($queryResult['idInformationPersonnelle']);
  483.             if ($tentative >= 2) {
  484.                 $utilisateur->setTentative(0);
  485.                 $dateBlocage = new \DateTime();
  486.                 $dateBlocage->add(new \DateInterval("PT30M"));
  487.                 $utilisateur->setDateBlocage($dateBlocage);
  488.             } else {
  489.                 $tentative++;
  490.                 $utilisateur->setTentative($tentative);
  491.             }
  492.             $this->_em->flush();
  493.         }
  494.         return;
  495.     }
  496.     public function getCtsInformationGeneralList($filtre = [])
  497.     {
  498.         $repositoryLM $this->getEntityManager()->getRepository(LettreMission::class);
  499.         $idLettresEtUser $repositoryLM->findDernieresLettreMissionActivesParUtilisateur();
  500.         $lettresIn = [];
  501.         foreach ($idLettresEtUser as $n => $l)
  502.             $lettresIn[$n] = $l['idLm'];
  503.         $query $this->createQueryBuilder('ui')
  504.             ->leftJoin('ui.utilisateur''u')
  505.             ->leftJoin('ui.idPoste''rp')
  506.             ->leftJoin('ui.idAffectation''ra')
  507.             ->leftJoin('ui.idFederation''rf')
  508.             ->leftJoin('App\Entity\RFederation''f''WITH''rf.rAdmDiside = f.rAdmDiside')
  509.             ->leftJoin(
  510.                 'App\Entity\LettreMission',
  511.                 'lm',
  512.                 'WITH',
  513.                 'u.idUtilisateur = lm.idUtilisateur '
  514.                     'AND lm.idLm IN (:liste_lm)'
  515.             )
  516.             ->setParameter(':liste_lm'$lettresIn);
  517.         $query->select('DISTINCT ui.civilite, ui.nom, ui.prenom, u.pCivMatcle, rp.libellePoste, '
  518.             'ra.libelleLong, rf.rAdmDiside, f.rSerLibc, f.rSerLibl, ra.rSerIdent, '
  519.             'ui.idUtilisateur, u.courriel, u.droitLmUtilisateur, rf.idFederation, '
  520.             'ra.idAffectation, u.idRole');
  521.         switch ($filtre['role']) {
  522.             case RefRole::ROLE_DS_ADMIN:
  523.             case RefRole::ROLE_DS_INVITE:
  524.             case RefRole::ROLE_DS_SIGNATAIRE:
  525.             case RefRole::ROLE_LECTEUR:
  526.                 if (!isset($filtre['AC']) || !$filtre['AC'])
  527.                     $query->where('u.idRole = :roleCts')
  528.                         ->setParameter(':roleCts'RefRole::ROLE_CTS);
  529.                 break;
  530.             case RefRole::ROLE_DR:
  531.             case RefRole::ROLE_DR_SIGNATAIRE:
  532.                 $query->where('ui.idAffectation = :affectation')
  533.                     ->andWhere('u.idRole = :roleCts')
  534.                     ->setParameter(':affectation'$filtre['affectation'])
  535.                     ->setParameter(':roleCts'RefRole::ROLE_CTS);
  536.                 break;
  537.             case RefRole::ROLE_FEDE:
  538.             case RefRole::ROLE_FEDE_INVITE:
  539.                 $query->where('ui.idFederation = :federation')
  540.                     ->andWhere('u.idRole = :roleCts')
  541.                     ->setParameter(':federation'$filtre['federation'])
  542.                     ->setParameter(':roleCts'RefRole::ROLE_CTS);
  543.                 break;
  544.             default:
  545.                 return null;
  546.         }
  547.         $query->orderBy('ui.nom, ui.prenom''DESC');
  548.         return $query->getQuery()->getResult();
  549.     }
  550.     public function findInformationsCreationOdm($idCTS)
  551.     {
  552.         $query $this->createQueryBuilder('ui')
  553.             ->leftJoin('ui.idAffectation''ra')
  554.             ->leftJoin('App\Entity\RefGabarit''rg''WITH''ra.idAffectation = rg.idAffectation')
  555.             ->innerJoin('ui.idFederation''rf')
  556.             ->innerJoin('App\Entity\RFederation''r_f''WITH''rf.rAdmDiside = r_f.rAdmDiside');
  557.         $query->select('ui.grade, ui.indiceMajore, rg.direction, rg.adresse, rg.email, r_f.rSerLibl')
  558.             ->where('ui.idUtilisateur = :idutilisateur')
  559.             ->setParameter(':idutilisateur'$idCTS);
  560.         return $query->getQuery()->getResult();
  561.     }
  562.     /**
  563.      * @desc        Récupère la liste des CTS
  564.      *
  565.      * @author    Sébastien MAILHES
  566.      * @param
  567.      * @return        array
  568.      *
  569.      * @version    1.0
  570.      */
  571.     public function getCtsInformationOmList($filtre = [])
  572.     {
  573.         $perimetre $filtre['perimetre'];
  574.         $droits $filtre['droits'];
  575.         $repositoryU $this->getEntityManager()->getRepository(Utilisateur::class);
  576.         $repositoryO $this->getEntityManager()->getRepository(Odm::class);
  577.         $filtre['pCivMatcle'] = $repositoryU->findMatcleUtilisateursWithOm($filtre);
  578.         $listeUtilisateurOm $this->getUtilisateurInformationOm($filtre);
  579.         $postes = [];
  580.         if (true === is_array($listeUtilisateurOm)) {
  581.             foreach ($listeUtilisateurOm as $user) {
  582.                 // Correction demande 24507 SGR Debut
  583.                 if (isset($postes[$user['matriculeAgent']]) === false) {
  584.                     // Correction demande 24507 SGR Fin
  585.                     $postes[$user['matriculeAgent']] = $user['libellePoste'];
  586.                 }
  587.             }
  588.         }
  589.         // Supression des OM en fonction du périmetre et des droits
  590.         if (true === is_array($listeUtilisateurOm)) {
  591.             foreach ($listeUtilisateurOm as $key => $odm) {
  592.                 if (true === isset($postes[$odm['matriculeAgent']])) {
  593.                     $signatory $repositoryO->getSignatory($odm['idOdm'], $postes[$odm['matriculeAgent']]); // AEL : p_civ_matcle vient de la base cts-web
  594.                     if (
  595.                         ($perimetre == && $signatory['signataire'] != 'DS') || ($perimetre == && $signatory['signataire'] != 'DRJSCS') || ($perimetre == || $perimetre == 2) && ($odm['etape'] == || ($odm['etape'] == && false === isset($droits['signatureYes'])))
  596.                     ) {
  597.                         unset($listeUtilisateurOm[$key]);
  598.                     }
  599.                 }
  600.             }
  601.         }
  602.         //préparation des dates
  603.         $today time();
  604.         $todayPlus4 $today 345600// 24 * 60 * 60 * 4;
  605.         $todayPlus15 $today 1_296_000// 24 * 60 * 60 * 15;
  606.         /**
  607.          * Tableau de données de sortie
  608.          * @var array $listeUtilisateurOm
  609.          *    [utilisateurId]
  610.          *        [data sur l'utilisateur]
  611.          *        ['om-critique'][idom][datasurl'om]
  612.          *        ['om-urgent'][idom][datasurl'om]
  613.          *        ['om-non-critique'][idom][datasurl'om]
  614.          */
  615.         foreach ($listeUtilisateurOm as $key => $utilisateur) {
  616.             $listeUtilisateurOm[$key]['omNonCritique'] = false;
  617.             $listeUtilisateurOm[$key]['omUrgent'] = false;
  618.             $listeUtilisateurOm[$key]['omCritique'] = false;
  619.             $dateDepart $utilisateur['dateDeDepart'];
  620.             if ($dateDepart->getTimestamp() >= $todayPlus15)
  621.                 $listeUtilisateurOm[$key]['omNonCritique'] = true;
  622.             elseif ($dateDepart->getTimestamp() >= $todayPlus4)
  623.                 $listeUtilisateurOm[$key]['omUrgent'] = true;
  624.             else
  625.                 $listeUtilisateurOm[$key]['omCritique'] = true;
  626.             $listeUtilisateurOm[$key]['dateDeDepart'] = $utilisateur['dateDeDepart']->format('Y-m-d');
  627.             $listeUtilisateurOm[$key]['dateDeRetour'] = $utilisateur['dateDeRetour']->format('Y-m-d');
  628.             $listeUtilisateurOm[$key]['dateDeNaissance'] = $utilisateur['dateDeNaissance']->format('Y-m-d');
  629.         }
  630.         return $listeUtilisateurOm;
  631.     }
  632.     public function getUtilisateurInformationOm($filtre = [])
  633.     {
  634.         $query $this->createQueryBuilder('ui')
  635.             ->innerJoin('ui.utilisateur''u')
  636.             ->innerJoin('ui.idPoste''rp')
  637.             ->innerJoin('ui.idFederation''rf')
  638.             ->innerJoin('App\Entity\RFederation''r_f''WITH''rf.rAdmDiside = r_f.rAdmDiside')
  639.             ->innerJoin('ui.idAffectation''ra')
  640.             ->innerJoin('App\Entity\Evenement''e''WITH''ui.idUtilisateur = e.idUtilisateur')
  641.             ->innerJoin('App\Entity\Odm''o''WITH''o.idOdm = e.odm')
  642.             ->innerJoin(
  643.                 'App\Entity\Workflow',
  644.                 'w',
  645.                 'WITH',
  646.                 'w.idWorkflow = o.workflow AND w.idWorkflow <= 11 '
  647.                     'AND w.idWorkflow NOT IN (' . (true === isset($filtre['tous']) && true === $filtre['tous'] ? '9,13' '12,13') . ')'
  648.                     'AND w.idWorkflow ' . (true === isset($filtre['signature']) && true === $filtre['signature'] ? '' '!') . '= 11'
  649.             )
  650.             ->setParameter(':current_date'date('Y-m-d'))
  651.             ->leftJoin(
  652.                 'App\Entity\LettreMission',
  653.                 'lm',
  654.                 'WITH',
  655.                 'lm.idUtilisateur = u.idUtilisateur AND lm.dateDebut <= :current_date AND ' .
  656.                     'lm.dateFin >= :current_date'
  657.             )
  658.             ->leftJoin('lm.idFop''fp');
  659.         $query->select('u.idUtilisateur, ui.civilite, ui.nom, ui.prenom, rf.rAdmDiside AS libelleCourtFederation, '
  660.             'r_f.rSerLibl AS libelleCourtDiscipline, r_f.rSerLibc, r_f.rAdmDiside, ra.libelleAffectation, ra.rSerIdent AS affectation, '
  661.             'rp.libellePoste, u.pCivMatcle AS matriculeAgent, ui.dateDeNaissance, u.courriel, '
  662.             'ra.libelleLong, fp.idFop, fp.libelleFop, '
  663.             'o.idOdm, o.destination, o.avisDtn, o.dateDeDepart, o.dateDeRetour, e.idPays, w.idWorkflow, w.libelleAction')
  664.             ->distinct();
  665.         if ($filtre['tous'] === true) {
  666.             $oneMonth = new \DateTime();
  667.             $oneMonth->sub(new \DateInterval('P90D'));
  668.             $twoMonths = new \DateTime();
  669.             $twoMonths->add(new \DateInterval('P2M'));
  670.             $query->where('o.dateDeRetour BETWEEN :first_current_year AND :last_current_year');
  671.             $query->setParameter(':first_current_year'$oneMonth->format('Y-m-d'))
  672.                 ->setParameter(':last_current_year'$twoMonths->format('Y-m-d'));
  673.             //$query->setParameter(':first_current_year', date('Y-01-01'))->setParameter(':last_current_year', date('Y-12-31'));
  674.         } else {
  675.             $query->where(
  676.                 $query->expr()->orX(
  677.                     $query->expr()->gte('o.dateDeRetour'':current_date'),
  678.                     $query->expr()->isNull('o.dateDeRetour')
  679.                 )
  680.             );
  681.         }
  682.         switch ($filtre['role']) {
  683.             case 1:
  684.                 $query->andWhere('1=1');
  685.             case 3:
  686.             case 4:
  687.             case 10:
  688.             case 11:
  689.                 $query->andWhere('ui.idAffectation = :affectation')
  690.                     ->setParameter(':affectation'$filtre['affectation']);
  691.                 break;
  692.             case 5:
  693.             case 8:
  694.                 $query->andWhere('ui.idFederation = :federation')
  695.                     ->setParameter(':federation'$filtre['federation']);
  696.                 break;
  697.             default:
  698.                 $query->andWhere('0=1');
  699.         }
  700.         if (false === isset($filtre['filtreMJS']));
  701.         else {
  702.             $query->andWhere('ra.rSerIdent = :filtreMJS')
  703.                 ->setParameter(':filtreMJS'$filtre['filtreMJS']); // MFA : #27374 utiliser le id de la table salzy3c. zy3b.idou00 => zy3c.idou00
  704.         }
  705.         if (true == isset($filtre['pCivMatcle']) && is_array($filtre['pCivMatcle'])) {
  706.             if (count($filtre['pCivMatcle']) == 0)
  707.                 return [];
  708.             $inClause '';
  709.             foreach ($filtre['pCivMatcle'] as $value)
  710.                 $inClause .= '\'' $value '\',';
  711.             $inClause substr($inClause0, -1);
  712.             $query->andWhere('u.pCivMatcle IN (' $inClause ')');
  713.         }
  714.         $query->orderBy('o.dateDeDepart, ui.nom, ui.prenom');
  715.         /* if( true === isset( $filtre['filtreGestionCTS'] ) && true === is_array( $filtre['filtreGestionCTS'] ) )
  716.         {
  717.         $fNom = false;
  718.         $fPrenom = false;
  719.         if( false === empty( $filtre['filtreGestionCTS']['nom'] ) )
  720.         $fNom =  $this -> _stripUnwantedChar( $filtre['filtreGestionCTS']['nom'] );
  721.         if( false === empty( $filtre['filtreGestionCTS']['prenom'] ) )
  722.         $fPrenom =  $this -> _stripUnwantedChar( $filtre['filtreGestionCTS']['prenom'] );
  723.         if( true === is_array( $res ) && ( $fNom !== false || $fPrenom !== false ) )
  724.         {
  725.         foreach( $res as $cle => $user )
  726.         {
  727.         $uNom = $this -> _stripUnwantedChar( $user['nomuse'] );
  728.         $uPrenom = $this -> _stripUnwantedChar( $user['prenom'] );
  729.         if( ( $fNom !== false && false === stripos( $uNom, $fNom ) ) ||
  730.         ( $fPrenom !== false && false === stripos( $uPrenom, $fPrenom ) ) )
  731.         unset( $res[ $cle ] );
  732.         }
  733.         }
  734.         } */
  735.         return $query->getQuery()->getResult();
  736.     }
  737.     function findMesCtsId($idUser)
  738.     {
  739.         $query $this->createQueryBuilder('ui')
  740.             ->innerJoin('ui.idAffectation''ra')
  741.             ->select('ra.idAffectation')
  742.             ->where('ui.idUtilisateur = :idutilisateur')
  743.             ->setParameter(':idutilisateur'$idUser);
  744.         $affectation $query->getQuery()->getResult()[0]['idAffectation'];
  745.         $query $this->createQueryBuilder('ui')
  746.             ->innerJoin('ui.utilisateur''u')
  747.             ->select('ui.idUtilisateur, ui.civilite, ui.nom, ui.prenom, ')
  748.             ->where('u.idRole = 2')
  749.             ->andWhere('ui.idAffectation = :idaffectation')
  750.             ->setParameter(':idaffectation'$affectation);
  751.         return $query->getQuery()->getResult();
  752.     }
  753.     function getUserInfoByLogin($login)
  754.     {
  755.         $currentDay = new \DateTime('now');
  756.         $query $this->createQueryBuilder('ui')
  757.             ->select('ui.dateBlocage, ui.dateFinDroits, ui.utilisateurActif')
  758.             ->where('ui.login = :login')
  759.             ->setParameter(':login'$login);
  760.         return $query->getQuery()->getOneOrNullResult();
  761.     }
  762.     function findMyFede($idFederation)
  763.     {
  764.         $query $this->createQueryBuilder('ui')
  765.             ->innerJoin('ui.idFederation''federation')
  766.             ->innerJoin('ui.idPoste''poste')
  767.             ->where('federation.idFederation = :idFederation')
  768.             ->andWhere('poste.idPoste = 3')
  769.             ->setParameter('idFederation'$idFederation)
  770.             ->setMaxResults(1)
  771.             ->getQuery()->getOneOrNullResult();
  772.         return $query;
  773.     }
  774.     function findMyCts($idCts$user)
  775.     {
  776.         $dtn = [85];
  777.         $query $this->createQueryBuilder('ui')
  778.             ->innerJoin('ui.idFederation''federation')
  779.             ->innerJoin('ui.idAffectation''affectation')
  780.             ->where('ui.idUtilisateur = :idCts');
  781.         if (in_array($user->getUtilisateur()->getIdRole(), $dtn) && $user->getIdFederation()) {
  782.             $query->setParameter('idFederation'$user->getIdFederation()->getIdFederation());
  783.             $query->andWhere('federation.idFederation = :idFederation');
  784.         } else {
  785.             if ($user->getUtilisateur()->getIdRole() && $user->getIdAffectation()) {
  786.                 if ($user->getUtilisateur()->getIdRole() == 11 || $user->getUtilisateur()->getIdRole() == 4) {
  787.                     $query->andWhere('affectation.idAffectation = :idAffectation');
  788.                     $query->setParameter('idAffectation'$user->getIdAffectation()->getIdAffectation());
  789.                 }
  790.             }
  791.         }
  792.         $query->setParameter('idCts'$idCts);
  793.         return $query->getQuery()->getResult();
  794.     }
  795.     public function findAllUserForCTSAdmin($idUtilisateur null$returnAsArray true)
  796.     {
  797.         $query $this->createQueryBuilder('ui')
  798.             ->innerJoin('ui.utilisateur''u')
  799.             ->innerJoin('u.role''rr')
  800.             ->leftJoin('ui.idPoste''idPoste')
  801.             ->leftJoin('ui.idFederation''federation')
  802.             ->leftJoin('ui.idAffectation''ra')
  803.             ->leftJoin('App\Entity\RFederation''r_f''WITH''federation.rAdmDiside = r_f.rAdmDiside')
  804.             ->leftJoin('ui.idOdmCadreGeneral''cg')
  805.             ->leftJoin('ui.idFop''fopc')
  806.             // ->andWhere('ui.idFop = fopc.idFop')
  807.             ->leftJoin('ui.idFoprinci''foprinci');
  808.             if (!$returnAsArray && $idUtilisateur) {
  809.                 $query->Where('u.idUtilisateur = :idUtilisateur')
  810.                 ->setParameter('idUtilisateur'$idUtilisateur// Définition du paramètre
  811.                 // Retourne des objets complets
  812.                 ->select('ui');
  813.             } else {
  814.             // ->andWhere('ui.idFoprinci = foprinci.idFop')
  815.             $query->select('DISTINCT ui.idUtilisateur, ui.dateDeNaissance, ui.civilite,ui.utilisateurActif, ui.nom,ui.dateFinDroits,
  816.             u.idRole, u.droitLmUtilisateur, u.pCivMatcle, ui.prenom, r_f.rSerLibl AS libelleCourtDiscipline, r_f.rSerLibc,
  817.             ui.grade, ui.indiceMajore, ui.dateFinDroits, ui.adresse,  ra.idAffectation, fopc.libelleFop as uiFonctionCompl, foprinci.libelleFop as uiFonctionPrinci,
  818.             cg.libelleOdmCadreGeneral as uiCadreGeneral,
  819.             r_f.rAdmDiside,idPoste.libellePoste as libellePoste,ra.libelleAffectation as libelleAffectation, 
  820.             ra.libelleLong as  libelleLong, ra.rSerIdent AS affectation,
  821.             u.courriel as courriel, u.telephonePortable as telephonePortable, u.telephoneBureau as telephoneBureau, 
  822.             rr.libelleRole,u.droitLmUtilisateur as droit,
  823.             federation.idFederation as idFederation, ra.idAffectation as idAffectation
  824.             
  825.             ');
  826.         }
  827.         $query->orderBy('ui.nom, ui.prenom''DESC');
  828.         return $query->getQuery()->getResult();
  829.     }
  830.     public function findAllUserIDForCTSAdmin()
  831.     {
  832.         $query $this->createQueryBuilder('ui')
  833.             ->select('ui.idUtilisateur');
  834.         // $query->orderBy('ui.nom, ui.prenom', 'DESC');
  835.         return $query->getQuery()->getResult();
  836.     }
  837.     public function findAllUserForonlyCTSAdmin($user)
  838.     {
  839.         $idRole $user->getUtilisateur()->getIdRole();
  840.         $affectation $user->getIdAffectation()->getIdAffectation();
  841.         $federation = (null != $user->getIdFederation()) ? $user->getIdFederation()->getIdFederation() : '';
  842.         $query $this->createQueryBuilder('ui')
  843.             ->innerJoin('ui.utilisateur''u')
  844.             ->leftJoin('u.role''rr')
  845.             ->leftJoin('ui.idPoste''idPoste')
  846.             ->leftJoin('ui.idFederation''federation')
  847.             ->leftJoin('ui.idAffectation''ra')
  848.             ->leftJoin('App\Entity\RFederation''r_f''WITH''federation.rAdmDiside = r_f.rAdmDiside')
  849.             ->leftJoin('ui.idOdmCadreGeneral''cg')
  850.             ->leftJoin('ui.idFop''fopc')
  851.             ->leftJoin('App\Entity\LettreMission''lm''WITH''lm.idUtilisateur = ui.idUtilisateur')
  852.             ->leftJoin('App\Entity\ProjetLettreMission''plm''WITH''lm.idLm = plm.idLm')
  853.             ->leftJoin('App\Entity\RefAffectation''refAff''WITH''plm.localisation = refAff.idAffectation')
  854.             ->leftJoin('lm.idFop''fop')
  855.             ->where('u.idRole = 2 or u.idRole = 5')
  856.             ->andWhere('ui.utilisateurActif = true');
  857.         switch ($idRole) {
  858.             case 1:
  859.                 $query->orWhere('ui.utilisateurActif = false');
  860.                 break;
  861.             case 4:
  862.             case 11:
  863.                 $query->andWhere('ui.idAffectation = :aff');
  864.                 $query->setParameter('aff'$affectation);
  865.                 break;
  866.             case 5:
  867.             case 8:
  868.                 $query->andWhere('ui.idFederation = :fed');
  869.                 $query->setParameter('fed'$federation);
  870.                 break;
  871.         }
  872.         $query->select('DISTINCT ui.idUtilisateur, ui.dateDeNaissance, ui.civilite,ui.utilisateurActif, ui.nom,ui.dateFinDroits,
  873.             u.idRole, u.droitLmUtilisateur, u.pCivMatcle, ui.prenom, u.telephoneBureau,  u.telephonePortable, r_f.rSerLibl AS libelleCourtDiscipline, r_f.rSerLibc,
  874.             ui.grade, ui.indiceMajore, ui.dateFinDroits, ui.adresse, fopc.libelleFop as uiFonctionCompl, fop.libelleFop AS libelleFOP, cg.libelleOdmCadreGeneral as uiCadreGeneral,
  875.             r_f.rAdmDiside,idPoste.libellePoste as libellePoste,ra.libelleAffectation as libelleAffectation,
  876.             ra.libelleLong as  libelleLong,ra.rSerIdent AS affectation,
  877.             u.courriel as courriel, rr.libelleRole, u.droitLmUtilisateur as droit,federation.idFederation as idFederation, ra.idAffectation as idAffectation,
  878.             plm.adresse_Activite as add, refAff.libelleAffectation as loc, plm.dateDebut as datedebut, plm.dateFin as datefin, lm.idLm as idlm , plm.idProjetLm');
  879.         $query->orderBy('ui.nom''ASC');
  880.         $results $query->getQuery()->getResult();
  881.         return $this->filtreExport($results);
  882.     }
  883.     public function findAllUserFornonCTSAdmin($user)
  884.     {
  885.         $idRole $user->getUtilisateur()->getIdRole();
  886.         $affectation $user->getIdAffectation()->getIdAffectation();
  887.         $federation = (null != $user->getIdFederation()) ? $user->getIdFederation()->getIdFederation() : '';
  888.         $query $this->createQueryBuilder('ui')
  889.             ->innerJoin('ui.utilisateur''u')
  890.             ->innerJoin('u.role''rr')
  891.             ->leftJoin('ui.idPoste''idPoste')
  892.             ->leftJoin('ui.idFederation''federation')
  893.             ->leftJoin('ui.idAffectation''ra')
  894.             ->leftJoin('App\Entity\RFederation''r_f''WITH''federation.rAdmDiside = r_f.rAdmDiside')
  895.             ->leftJoin('ui.idOdmCadreGeneral''cg')
  896.             ->leftJoin('ui.idFop''fopc')
  897.             ->leftJoin('ui.idFoprinci''foprinci')
  898.             ->leftJoin('App\Entity\LettreMission''lm''WITH''lm.idUtilisateur = ui.idUtilisateur')
  899.             ->leftJoin('App\Entity\ProjetLettreMission''plm''WITH''lm.idLm = plm.idLm')
  900.             ->leftJoin('App\Entity\RefAffectation''refAff''WITH''plm.localisation = refAff.idAffectation')
  901.             ->leftJoin('lm.idFop''fop')
  902.             ->where('u.idRole <> 2 and u.idRole <> 5')
  903.             ->andWhere('ui.utilisateurActif = true');
  904.         switch ($idRole) {
  905.             case 1:
  906.                 $query->orWhere('ui.utilisateurActif = false');
  907.                 break;
  908.             case 4:
  909.             case 11:
  910.                 $query->andWhere('ui.idAffectation = :aff');
  911.                 $query->setParameter('aff'$affectation);
  912.                 break;
  913.             case 5:
  914.             case 8:
  915.                 $query->andWhere('ui.idFederation = :fed');
  916.                 $query->setParameter('fed'$federation);
  917.                 break;
  918.         }
  919.         $query->select('DISTINCT ui.idUtilisateur, ui.dateDeNaissance, ui.civilite,ui.utilisateurActif, ui.nom,ui.dateFinDroits,
  920.                 u.idRole, u.droitLmUtilisateur, u.pCivMatcle, ui.prenom, u.telephoneBureau,  u.telephonePortable, r_f.rSerLibl AS libelleCourtDiscipline, r_f.rSerLibc,
  921.                 ui.grade, ui.indiceMajore, ui.dateFinDroits, ui.adresse, 
  922.                 fopc.libelleFop as uiFonctionCompl,
  923.                 fop.libelleFop AS libelleFOP,
  924.                 foprinci.libelleFop as uiFonctionPrinci,
  925.                 cg.libelleOdmCadreGeneral as uiCadreGeneral,
  926.                 r_f.rAdmDiside,idPoste.libellePoste as libellePoste,ra.libelleAffectation as libelleAffectation,
  927.                 ra.libelleLong as  libelleLong,ra.rSerIdent AS affectation,
  928.                 u.courriel as courriel, rr.libelleRole, u.droitLmUtilisateur as droit,federation.idFederation as idFederation, ra.idAffectation as idAffectation,
  929.                 plm.adresse_Activite as add, refAff.libelleAffectation as loc, plm.dateDebut as datedebut, plm.dateFin as datefin, lm.idLm as idlm , plm.idProjetLm');
  930.         $query->orderBy('ui.nom, ui.prenom''DESC');
  931.         $results $query->getQuery()->getResult();
  932.         return $this->filtreExport($results);
  933.     }
  934.     public function findAllUserForCTSByAffectationAndFederation($idAffectation$idFederation$idRole$idUtilisateur null$returnAsArray true)
  935.     {
  936.         if (in_array($idRole, [RefRole::ROLE_DS_ADMIN])) {
  937.             $query $this->createQueryBuilder('ui')
  938.                 ->innerJoin('ui.utilisateur''u')
  939.                 ->innerJoin('u.role''rr')
  940.                 ->leftJoin('ui.idPoste''idPoste')
  941.                 ->leftJoin('ui.idFederation''federation')
  942.                 ->leftJoin('ui.idAffectation''ra')
  943.                 ->leftJoin('App\Entity\RFederation''r_f''WITH''federation.rAdmDiside = r_f.rAdmDiside')
  944.                 ->leftJoin('ui.idOdmCadreGeneral''cg')
  945.                 ->leftJoin('ui.idFop''fopc')
  946.                 // ->andWhere('ui.idFop = fopc.idFop')
  947.                 ->leftJoin('ui.idFoprinci''foprinci');
  948.                 // ->andWhere('ui.idFoprinci = foprinci.idFop')
  949.                 if (!$returnAsArray && $idUtilisateur) {
  950.                     $query->Where('u.idUtilisateur = :idUtilisateur')
  951.                     ->setParameter('idUtilisateur'$idUtilisateur// Définition du paramètre
  952.                     // Retourne des objets complets
  953.                     ->select('ui');
  954.                 } else {
  955.                 $query->select('DISTINCT ui.idUtilisateur, ui.dateDeNaissance, ui.civilite,ui.utilisateurActif, ui.nom,ui.dateFinDroits,
  956.                 u.idRole, u.droitLmUtilisateur, u.pCivMatcle, ui.prenom, r_f.rSerLibl AS libelleCourtDiscipline, r_f.rSerLibc,
  957.                 ui.grade, ui.indiceMajore, ui.dateFinDroits, ui.adresse, fopc.libelleFop as uiFonctionCompl, foprinci.libelleFop as uiFonctionPrinci, cg.libelleOdmCadreGeneral as uiCadreGeneral,
  958.                 r_f.rAdmDiside,idPoste.libellePoste as libellePoste,ra.libelleAffectation as libelleAffectation,
  959.                 ra.libelleLong as  libelleLong,ra.rSerIdent AS affectation,
  960.                 u.courriel as courriel,rr.libelleRole,u.droitLmUtilisateur as droit,federation.idFederation as idFederation, ra.idAffectation as idAffectation');
  961.                 }
  962.             // $query->setParameter('idAffectation', $idAffectation);
  963.         } elseif (in_array($idRole, [RefRole::ROLE_DS_SIGNATAIRERefRole::ROLE_DS_INVITERefRole::ROLE_CTS])) {
  964.             $query $this->createQueryBuilder('ui')
  965.                 ->innerJoin('ui.utilisateur''u')
  966.                 ->innerJoin('u.role''rr')
  967.                 ->leftJoin('ui.idPoste''idPoste')
  968.                 ->leftJoin('ui.idFederation''federation')
  969.                 ->leftJoin('ui.idAffectation''ra')
  970.                 ->leftJoin('App\Entity\RFederation''r_f''WITH''federation.rAdmDiside = r_f.rAdmDiside')
  971.                 ->leftJoin('ui.idOdmCadreGeneral''cg')
  972.                 ->leftJoin('ui.idFop''fopc')
  973.                 // ->andWhere('ui.idFop = fopc.idFop')
  974.                 ->leftJoin('ui.idFoprinci''foprinci')
  975.                 // ->andWhere('ui.idFoprinci = foprinci.idFop')
  976.                 ->andWhere('ui.utilisateurActif = true');
  977.                 if (!$returnAsArray && $idUtilisateur) {
  978.                     $query->andWhere('u.idUtilisateur = :idUtilisateur')
  979.                     ->setParameter('idUtilisateur'$idUtilisateur// Définition du paramètre
  980.                     // Retourne des objets complets
  981.                     ->select('ui');
  982.                 } else {
  983.                 $query->select('DISTINCT ui.idUtilisateur, ui.dateDeNaissance, ui.civilite,ui.utilisateurActif, ui.nom,ui.dateFinDroits,
  984.                 u.idRole, u.droitLmUtilisateur, u.pCivMatcle, ui.prenom, r_f.rSerLibl AS libelleCourtDiscipline, r_f.rSerLibc,
  985.                 ui.grade, ui.indiceMajore, ui.dateFinDroits, ui.adresse, fopc.libelleFop as uiFonctionCompl, foprinci.libelleFop as uiFonctionPrinci, cg.libelleOdmCadreGeneral as uiCadreGeneral,
  986.                 r_f.rAdmDiside,idPoste.libellePoste as libellePoste,ra.libelleAffectation as libelleAffectation,
  987.                 ra.libelleLong as  libelleLong,ra.rSerIdent AS affectation,
  988.                 u.courriel as courriel,rr.libelleRole,u.droitLmUtilisateur as droit,federation.idFederation as idFederation, ra.idAffectation as idAffectation');
  989.                 }
  990.             // $query->setParameter('idAffectation', $idAffectation);
  991.         } elseif (in_array($idRole, [RefRole::ROLE_FEDERefRole::ROLE_FEDE_INVITE])) {
  992.             $query $this->createQueryBuilder('ui')
  993.                 ->innerJoin('ui.utilisateur''u')
  994.                 ->innerJoin('u.role''rr')
  995.                 ->leftJoin('ui.idPoste''idPoste')
  996.                 ->leftJoin('ui.idFederation''federation')
  997.                 ->andWhere('ui.idFederation = :idFederation')
  998.                 ->leftJoin('ui.idAffectation''ra')
  999.                 ->leftJoin('App\Entity\RFederation''r_f''WITH''federation.rAdmDiside = r_f.rAdmDiside')
  1000.                 ->leftJoin('ui.idOdmCadreGeneral''cg')
  1001.                 ->leftJoin('ui.idFop''fopc')
  1002.                 // ->andWhere('ui.idFop = fopc.idFop')
  1003.                 ->leftJoin('ui.idFoprinci''foprinci')
  1004.                 // ->andWhere('ui.idFoprinci = foprinci.idFop')
  1005.                 ->andWhere('ui.utilisateurActif = true');
  1006.                 if (!$returnAsArray && $idUtilisateur) {
  1007.                     $query->andWhere('u.idUtilisateur = :idUtilisateur')
  1008.                     ->setParameter('idUtilisateur'$idUtilisateur// Définition du paramètre
  1009.                     // Retourne des objets complets
  1010.                     ->select('ui');
  1011.                 } else {
  1012.                 $query->select('DISTINCT ui.idUtilisateur, ui.dateDeNaissance, ui.civilite,ui.utilisateurActif, ui.nom,ui.dateFinDroits,
  1013.                 u.idRole, u.droitLmUtilisateur, u.pCivMatcle, ui.prenom, r_f.rSerLibl AS libelleCourtDiscipline, r_f.rSerLibc,
  1014.                 ui.grade, ui.indiceMajore, ui.dateFinDroits, ui.adresse, fopc.libelleFop as uiFonctionCompl, foprinci.libelleFop as uiFonctionPrinci, cg.libelleOdmCadreGeneral as uiCadreGeneral,
  1015.                 r_f.rAdmDiside,idPoste.libellePoste as libellePoste,ra.libelleAffectation as libelleAffectation,
  1016.                 ra.libelleLong as  libelleLong,ra.rSerIdent AS affectation,
  1017.                 u.courriel as courriel,rr.libelleRole,u.droitLmUtilisateur as droit,federation.idFederation as idFederation, ra.idAffectation as idAffectation');
  1018.                 } 
  1019.                 $query->setParameter('idFederation'$idFederation);
  1020.                 
  1021.         } else {
  1022.             if ($idFederation == null) {
  1023.                 $query $this->createQueryBuilder('ui')
  1024.                     ->innerJoin('ui.utilisateur''u')
  1025.                     ->innerJoin('u.role''rr')
  1026.                     ->leftJoin('ui.idPoste''idPoste')
  1027.                     ->leftJoin('ui.idFederation''federation')
  1028.                     ->leftJoin('ui.idAffectation''ra')
  1029.                     ->andWhere('ui.idAffectation = :idAffectation')
  1030.                     ->leftJoin('App\Entity\RFederation''r_f''WITH''federation.rAdmDiside = r_f.rAdmDiside')
  1031.                     ->leftJoin('ui.idOdmCadreGeneral''cg')
  1032.                     ->leftJoin('ui.idFop''fopc')
  1033.                     // ->andWhere('ui.idFop = fopc.idFop')
  1034.                     ->leftJoin('ui.idFoprinci''foprinci')
  1035.                     // ->andWhere('ui.idFoprinci = foprinci.idFop')
  1036.                     ->andWhere('ui.utilisateurActif = true');
  1037.                     if (!$returnAsArray && $idUtilisateur) {
  1038.                         $query->andWhere('u.idUtilisateur = :idUtilisateur')
  1039.                         ->setParameter('idUtilisateur'$idUtilisateur// Définition du paramètre
  1040.                         // Retourne des objets complets
  1041.                         ->select('ui');
  1042.                     } else {
  1043.                     $query->select('DISTINCT ui.idUtilisateur, ui.dateDeNaissance, ui.civilite,ui.utilisateurActif, ui.nom,ui.dateFinDroits,
  1044.                     u.idRole, u.droitLmUtilisateur, u.pCivMatcle, ui.prenom, r_f.rSerLibl AS libelleCourtDiscipline, r_f.rSerLibc,
  1045.                     ui.grade, ui.indiceMajore, ui.dateFinDroits, ui.adresse, fopc.libelleFop as uiFonctionCompl, foprinci.libelleFop as uiFonctionPrinci, cg.libelleOdmCadreGeneral as uiCadreGeneral,
  1046.                     r_f.rAdmDiside,idPoste.libellePoste as libellePoste,ra.libelleAffectation as libelleAffectation,
  1047.                     ra.libelleLong as  libelleLong,ra.rSerIdent AS affectation,
  1048.                     u.courriel as courriel,rr.libelleRole,u.droitLmUtilisateur as droit,federation.idFederation as idFederation, ra.idAffectation as idAffectation');
  1049.                     }
  1050.             } else {
  1051.                 $query $this->createQueryBuilder('ui')
  1052.                     ->innerJoin('ui.utilisateur''u')
  1053.                     ->innerJoin('u.role''rr')
  1054.                     ->leftJoin('ui.idPoste''idPoste')
  1055.                     ->leftJoin('ui.idFederation''federation')
  1056.                     ->leftJoin('ui.idAffectation''ra')
  1057.                     ->andWhere('ui.idAffectation = :idAffectation')
  1058.                     ->andWhere('ui.idFederation = :idFederation')
  1059.                     ->leftJoin('App\Entity\RFederation''r_f''WITH''federation.rAdmDiside = r_f.rAdmDiside')
  1060.                     ->leftJoin('ui.idOdmCadreGeneral''cg')
  1061.                     ->leftJoin('ui.idFop''fopc')
  1062.                     // ->andWhere('ui.idFop = fopc.idFop')
  1063.                     ->leftJoin('ui.idFoprinci''foprinci')
  1064.                     // ->andWhere('ui.idFoprinci = foprinci.idFop')
  1065.                     ->andWhere('ui.utilisateurActif = true');
  1066.                     if (!$returnAsArray && $idUtilisateur) {
  1067.                         $query->andWhere('u.idUtilisateur = :idUtilisateur')
  1068.                         ->setParameter('idUtilisateur'$idUtilisateur// Définition du paramètre
  1069.                         // Retourne des objets complets
  1070.                         ->select('ui');
  1071.                     } else {
  1072.                         $query->select('DISTINCT ui.idUtilisateur, ui.dateDeNaissance, ui.civilite,ui.utilisateurActif, ui.nom,ui.dateFinDroits,
  1073.                     u.idRole, u.droitLmUtilisateur, u.pCivMatcle, ui.prenom, r_f.rSerLibl AS libelleCourtDiscipline, r_f.rSerLibc,
  1074.                     ui.grade, ui.indiceMajore, ui.dateFinDroits, ui.adresse, fopc.libelleFop as uiFonctionCompl, foprinci.libelleFop as uiFonctionPrinci, cg.libelleOdmCadreGeneral as uiCadreGeneral,
  1075.                     r_f.rAdmDiside,idPoste.libellePoste as libellePoste,ra.libelleAffectation as libelleAffectation,
  1076.                     ra.libelleLong as  libelleLong,ra.rSerIdent AS affectation,
  1077.                     u.courriel as courriel,rr.libelleRole,u.droitLmUtilisateur as droit,federation.idFederation as idFederation, ra.idAffectation as idAffectation');
  1078.                     }
  1079.                 $query->setParameter('idFederation'$idFederation);
  1080.             }
  1081.             $query->setParameter('idAffectation'$idAffectation);
  1082.         }
  1083.         $query->orderBy('ui.nom, ui.prenom''DESC');
  1084.         return $query->getQuery()->getResult();
  1085.     }
  1086.     function findMyCollab($user)
  1087.     {
  1088.         // $today = new \DateTime('now');
  1089.         // $today = $today->format('Y-m-d');
  1090.         $query $this->createQueryBuilder('ui')
  1091.             ->innerJoin('ui.utilisateur''u')
  1092.             ->innerJoin('ui.idPoste''idPoste')
  1093.             ->innerJoin('ui.idFederation''federation')
  1094.             ->innerJoin('ui.idAffectation''ra')
  1095.             ->leftJoin('App\Entity\RFederation''r_f''WITH''federation.rAdmDiside = r_f.rAdmDiside')
  1096.             ->leftJoin('ui.idOdmCadreGeneral''cg')
  1097.             ->leftJoin('ui.idFop''fopc')
  1098.             ->where('ui.idPoste IS NOT NULL')
  1099.             ->andWhere('ui.utilisateurActif = true')
  1100.             ->andWhere('federation.federationActive = true')
  1101.             // ->setParameter('today', date($today))
  1102.             // ->andWhere('ui.dateFinDroits >= :today')
  1103.             ->select('DISTINCT u.idUtilisateur, u.telephoneBureau, u.telephonePortable , ui.dateDeNaissance, ui.login, ui.civilite, ui.nom, ui.prenom,
  1104.                 ui.grade, ui.indiceMajore, ui.dateFinDroits, ui.adresse, fopc.libelleFop as uiFonctionCompl, cg.libelleOdmCadreGeneral as uiCadreGeneral,
  1105.                 r_f.rSerLibl AS libelleCourtDiscipline, r_f.rSerLibc,
  1106.                 r_f.rAdmDiside, u.pCivMatcle as pCivMatcle, idPoste.libellePoste as libellePoste,
  1107.                 ra.libelleAffectation as libelleAffectation, ra.libelleLong as  libelleLong, ra.rSerIdent AS affectation,
  1108.                 u.courriel as courriel, u.droitLmUtilisateur as droit, federation.idFederation as idFederation, ra.idAffectation as idAffectation, u.idRole as IdRole
  1109.                 ')
  1110.             ->addSelect('FIRST(SELECT fop.libelleFop FROM App\Entity\LettreMission lm
  1111.                 INNER JOIN lm.plm plm INNER JOIN lm.idFop fop
  1112.                 WHERE lm.idUtilisateur = u.idUtilisateur AND plm.idWorkflow = 7 ORDER BY lm.idLm DESC) AS libelleFop');
  1113.         if ($user->getIdFederation()) {
  1114.             $query->setParameter('idFederation'$user->getIdFederation()->getIdFederation());
  1115.             $query->andWhere('federation.idFederation = :idFederation');
  1116.         } else {
  1117.             $dtn = [RefRole::ROLE_DS_SIGNATAIRERefRole::ROLE_DS_INVITERefRole::ROLE_DS_ADMINRefRole::ROLE_LECTEUR];
  1118.             if (!in_array($user->getUtilisateur()->getIdRole(), $dtn)) {
  1119.                 $query->setParameter('idAffectation'$user->getIdAffectation()->getIdAffectation());
  1120.                 $query->andWhere('ra.idAffectation = :idAffectation');
  1121.             }
  1122.         }
  1123.         $query->orderBy('ui.nom, ui.prenom''DESC');
  1124.         // dump($today); die();
  1125.         return $query->getQuery()->getResult();
  1126.     }
  1127.     function findAllCollabsForStatistique($date)
  1128.     {
  1129.         $query $this->createQueryBuilder('ui')
  1130.             ->innerJoin('ui.utilisateur''u')
  1131.             ->innerJoin('u.role''role')
  1132.             ->innerJoin('ui.idPoste''idPoste')
  1133.             ->innerJoin('ui.idFederation''federation')
  1134.             ->innerJoin('ui.idAffectation''ra')
  1135.             ->leftJoin('App\Entity\RFederation''r_f''WITH''federation.rAdmDiside = r_f.rAdmDiside')
  1136.             ->where('ui.idPoste IS NOT NULL')
  1137.             ->andWhere('u.dateCreation <= :date')
  1138.             ->andWhere('ui.utilisateurActif = true')
  1139.             ->andWhere('federation.federationActive = true')
  1140.             ->select('DISTINCT u.idUtilisateur, ui.civilite, ui.nom, ui.prenom,' 'r_f.rSerLibl, r_f.rSerLibc
  1141.             , r_f.rAdmDiside as libelle_court_federation,u.pCivMatcle as pCivMatcle,idPoste.libellePoste as libelle_poste,ra.libelleAffectation as libelleAffectation,ra.libelleLong as  libelleLong,ra.rSerIdent AS affectation
  1142.                 ,' 'u.courriel as courriel, u.droitLmUtilisateur as droit,federation.idFederation as idFederation, ra.idAffectation as idAffectation, role.idRole as IdRole');
  1143.         $query->setParameter('date'$date);
  1144.         return $query->getQuery()->getResult();
  1145.     }
  1146.     public function findOdmAdemander($firstDate$lastDate$idFede)
  1147.     {
  1148.         $query $this->createQueryBuilder('ui')
  1149.             ->select('DISTINCT odm.idOdm,ui.nom, ui.prenom, affectation.libelleAffectation As libelleAffectation,odm.dateDeDepart As dateDeDepart,poste.libellePoste As libellePoste ,workflow.libelleAction As Statut, pays.libellePays As libellePays,e.ville As ville')
  1150.             ->innerJoin('ui.utilisateur''utilisateur')
  1151.             ->innerJoin('ui.idFederation''federation')
  1152.             ->innerJoin('ui.idAffectation''affectation')
  1153.             ->innerJoin('ui.idPoste''poste')
  1154.             ->innerJoin('App\Entity\Evenement''e''WITH''e.idUtilisateur = ui.idUtilisateur')
  1155.             ->innerJoin('e.odm''odm')
  1156.             ->innerJoin('e.pays''pays')
  1157.             ->innerJoin('odm.workflow''workflow')
  1158.             ->where('odm.avisDtn IS NULL')
  1159.             ->andWhere('workflow.idWorkflow = 10')
  1160.             ->andWhere('federation.idFederation = :idFede')
  1161.             ->andWhere('odm.dateDeDepart BETWEEN :firstDate AND :lastDate ')
  1162.             ->setParameter('firstDate'$firstDate)
  1163.             ->setParameter('idFede'$idFede)
  1164.             ->setParameter('lastDate'$lastDate);
  1165.         return $query->getQuery()->getResult();
  1166.     }
  1167.     public function findAllDtn()
  1168.     {
  1169.         $query $this->createQueryBuilder('ui')
  1170.             ->select('ui.idUtilisateur,ui.nom As nom,ui.prenom AS prenom ,federation.idFederation AS idFede,utilisateur.courriel AS courriel')
  1171.             ->innerJoin('ui.idFederation''federation')
  1172.             ->innerJoin('ui.utilisateur''utilisateur')
  1173.             ->innerJoin('utilisateur.role''role')
  1174.             ->where('ui.utilisateurActif = true')
  1175.             ->andWhere('federation.federationActive = true')
  1176.             ->andwhere('role.idRole IN (5,8)');
  1177.         return $query->getQuery()->getResult();
  1178.     }
  1179.     function findListeProjetLettreMissionByFede($idFederation)
  1180.     {
  1181.         $query $this->createQueryBuilder('ui')
  1182.             ->where('ui.idFederation = :idFed')
  1183.             ->setParameter('idFed'$idFederation);
  1184.         return $query->getQuery()->getResult();
  1185.     }
  1186.     function findListeProjetLettreMissionByAff($idAffectation)
  1187.     {
  1188.         $query $this->createQueryBuilder('ui')
  1189.             ->where('ui.idAffectation = :idAff')
  1190.             ->setParameter('idAff'$idAffectation);
  1191.         return $query->getQuery()->getResult();
  1192.     }
  1193.     /**
  1194.      * Requête pour récuperer les CTS actifs
  1195.      * @param array $filtre
  1196.      * @return mixed
  1197.      *
  1198.      */
  1199.     private function queryInfoCts($filtre = [])
  1200.     {
  1201.         $query $this->createQueryBuilder('ui')
  1202.             ->leftJoin('ui.utilisateur''u')
  1203.             ->leftJoin('ui.idPoste''rp')
  1204.             ->leftJoin('ui.idAffectation''ra')
  1205.             ->leftJoin('ui.idFederation''rf')
  1206.             ->leftJoin('App\Entity\RFederation''f''WITH''rf.rAdmDiside = f.rAdmDiside');
  1207.         $query->select('DISTINCT ui.civilite, ui.nom, ui.prenom, u.pCivMatcle, rp.libellePoste, '
  1208.             'ra.libelleLong, rf.rAdmDiside, f.rSerLibc, f.rSerLibl, ra.rSerIdent, '
  1209.             'ui.idUtilisateur, u.courriel, u.droitLmUtilisateur, rf.idFederation, '
  1210.             'ra.idAffectation, u.idRole');
  1211.         switch ($filtre['role']) {
  1212.             case RefRole::ROLE_DS_ADMIN:
  1213.             case RefRole::ROLE_DS_INVITE:
  1214.             case RefRole::ROLE_DS_SIGNATAIRE:
  1215.             case RefRole::ROLE_LECTEUR:
  1216.                 $query->where('u.idRole = :role_cts or u.idRole = :role_fede')
  1217.                     ->andWhere('ui.utilisateurActif = true')
  1218.                     ->andWhere('rf.federationActive = true')
  1219.                     ->setParameter('role_cts'RefRole::ROLE_CTS)
  1220.                     ->setParameter('role_fede'RefRole::ROLE_FEDE);
  1221.                 break;
  1222.             case RefRole::ROLE_DR:
  1223.             case RefRole::ROLE_DR_SIGNATAIRE:
  1224.                 $query->where('ui.idAffectation = :affectation')
  1225.                     ->setParameter(':affectation'$filtre['affectation'])
  1226.                     ->andWhere('u.idRole = :role_cts or u.idRole = :role_fede')
  1227.                     ->andWhere('ui.utilisateurActif = true')
  1228.                     ->andWhere('rf.federationActive = true')
  1229.                     ->setParameter('role_cts'RefRole::ROLE_CTS)
  1230.                     ->setParameter('role_fede'RefRole::ROLE_FEDE);
  1231.                 break;
  1232.             case RefRole::ROLE_FEDE:
  1233.             case RefRole::ROLE_FEDE_INVITE:
  1234.                 $query->where('ui.idFederation = :federation')
  1235.                     ->setParameter(':federation'$filtre['federation'])
  1236.                     ->andWhere('u.idRole = :role_cts or u.idRole = :role_fede')
  1237.                     ->setParameter('role_cts'RefRole::ROLE_CTS)
  1238.                     ->setParameter('role_fede'RefRole::ROLE_FEDE);
  1239.                 $query->andWhere('ui.utilisateurActif = true')
  1240.                     ->andWhere('rf.federationActive = true');
  1241.                 break;
  1242.             default:
  1243.                 $query->where('0=1');
  1244.         }
  1245.         $query->orderBy('ui.nom, ui.prenom''DESC');
  1246.         return $query;
  1247.     }
  1248.     public function getInfosCts($filtre = [])
  1249.     {
  1250.         $query $this->queryInfoCts($filtre);
  1251.         return $query->getQuery()->getResult();
  1252.     }
  1253.     public function getInfosCtsWithLM($filtre = [])
  1254.     {
  1255.         $query $this->queryInfoCts($filtre);
  1256.         $subQuerySignedPlm 'FIRST(SELECT plm2.idProjetLm FROM App\Entity\ProjetLettreMission plm2 WHERE'
  1257.             ' plm2.idWorkflow = ' Workflow::LM_SIGNEE
  1258.             ' AND plm2.idUtilisateur = ui.idUtilisateur ORDER BY plm2.idProjetLm DESC)';
  1259.         $query->innerJoin('App\Entity\ProjetLettreMission''plm''WITH''plm.idProjetLm = ' $subQuerySignedPlm)
  1260.             ->leftJoin('plm.idFop''fop')
  1261.             ->leftJoin('plm.idLm''lm')
  1262.             ->leftJoin('ui.idFop''fopComp')
  1263.             ->leftJoin('ui.idOdmCadreGeneral''cg')
  1264.             ->addSelect('ui.grade, ui.indiceMajore, ui.dateFinDroits, fopComp.libelleFop as uiFonctionCompl,
  1265.             cg.libelleOdmCadreGeneral as uiCadreGeneral, plm.idProjetLm, plm.dateDebut, plm.dateFin, lm.idLm, fop.libelleFop');
  1266.         return $query->getQuery()->getResult();
  1267.     }
  1268.     public function findSuperieurAffectation($affectation)
  1269.     {
  1270.         $tableSup = [];
  1271.         $query $this->createQueryBuilder('ui')
  1272.             ->innerJoin('ui.utilisateur''u')
  1273.             ->where('u.idRole IN (4, 11)')
  1274.             ->andWhere('ui.idAffectation = :affectation')
  1275.             ->setParameter(':affectation'$affectation);
  1276.         $query->select('u.idUtilisateur');
  1277.         $res $query->getQuery()->getResult();
  1278.         foreach ($res as $id) {
  1279.             $tableSup[] = $id['idUtilisateur'];
  1280.         }
  1281.         return $tableSup;
  1282.     }
  1283.     public function findSuperieurFederation($federation)
  1284.     {
  1285.         $tableSup = [];
  1286.         $query $this->createQueryBuilder('ui')
  1287.             ->innerJoin('ui.utilisateur''u')
  1288.             ->where('u.idRole IN (5, 8)')
  1289.             ->andWhere('ui.idFederation = :federation')
  1290.             ->setParameter(':federation'$federation);
  1291.         $query->select('u.idUtilisateur');
  1292.         $res $query->getQuery()->getResult();
  1293.         foreach ($res as $id) {
  1294.             $tableSup[] = $id['idUtilisateur'];
  1295.         }
  1296.         return $tableSup;
  1297.     }
  1298.     public function findSuperieurDS()
  1299.     {
  1300.         $tableSup = [];
  1301.         $query $this->createQueryBuilder('ui')
  1302.             ->innerJoin('ui.utilisateur''u')
  1303.             ->where('u.idRole IN (1, 3, 10)');
  1304.         $query->select('u.idUtilisateur');
  1305.         $res $query->getQuery()->getResult();
  1306.         foreach ($res as $id) {
  1307.             $tableSup[] = $id['idUtilisateur'];
  1308.         }
  1309.         return $tableSup;
  1310.     }
  1311.     public function getInfosCtsForStatistiquePerimetre($dateDebut$dateFin$idAffectation null$idFederation null$idPoste null$idFop null)
  1312.     {
  1313.         $query $this->createQueryBuilder('ui')
  1314.             ->select('utilisateur.idUtilisateur AS user , ev.idPerimetre')
  1315.             ->innerJoin('App\Entity\Evenement''ev''WITH''ui.idUtilisateur = ev.idUtilisateur')
  1316.             ->innerJoin('ui.utilisateur''utilisateur')
  1317.             ->Where('ev.date BETWEEN :dateDebut AND :dateFin')
  1318.             ->andWhere('ev.finEvenement BETWEEN :dateDebut AND :dateFin')
  1319.             ->andWhere('ev.idPerimetre IS NOT NULL')
  1320.             ->distinct('ui.idUtilisateur')
  1321.             ->setParameter('dateDebut'$dateDebut)
  1322.             ->setParameter('dateFin'$dateFin);
  1323.         if ($idAffectation) {
  1324.             $query->innerJoin('ui.idAffectation''affectation')
  1325.                 ->andWhere('affectation.idAffectation = :idAffectation');
  1326.             $query->setParameter('idAffectation'$idAffectation);
  1327.         }
  1328.         if ($idFederation) {
  1329.             $query->innerJoin('ui.idFederation''federation')
  1330.                 ->andWhere('federation.idFederation = :idFederation')
  1331.                 ->setParameter('idFederation'$idFederation);
  1332.         }
  1333.         if ($idPoste) {
  1334.             $query->innerJoin('ui.idPoste''poste')
  1335.                 ->andWhere('poste.idPoste = :idPoste')
  1336.                 ->setParameter(':idPoste'$idPoste);
  1337.         }
  1338.         if ($idFop) {
  1339.             $query->innerJoin('App\Entity\ProjetLettreMission''plm''WITH''ui.idUtilisateur = plm.idUtilisateur')
  1340.                 ->andWhere('plm.idFop = :idFop')
  1341.                 ->andWhere('plm.dateDebut <= :dateDebut')
  1342.                 ->andWhere('plm.dateFin >= :dateFin')
  1343.                 ->andWhere('plm.idWorkflow = 7')
  1344.                 ->setParameter('idFop'$idFop);
  1345.         }
  1346.         $query->groupBy('utilisateur.idUtilisateur,ev.idPerimetre ');
  1347.         return $query->getQuery()->getScalarResult();
  1348.     }
  1349.     public function getInfosCtsForStatistiqueAction($dateDebut$dateFin$idAffectation null$idFederation null$idPoste null$idFop null)
  1350.     {
  1351.         $query $this->createQueryBuilder('ui')
  1352.             ->select('utilisateur.idUtilisateur AS user , act.idAction')
  1353.             ->innerJoin('App\Entity\Evenement''ev''WITH''ui.idUtilisateur = ev.idUtilisateur')
  1354.             ->innerJoin('App\Entity\RefAction''act''WITH''ev.idAction = act.idAction')
  1355.             ->innerJoin('ui.utilisateur''utilisateur')
  1356.             ->Where('ev.date BETWEEN :dateDebut AND :dateFin')
  1357.             ->andWhere('ev.finEvenement BETWEEN :dateDebut AND :dateFin')
  1358.             ->andWhere('ev.action IS NOT NULL')
  1359.             ->distinct('ui.idUtilisateur')
  1360.             ->setParameter('dateDebut'$dateDebut)
  1361.             ->setParameter('dateFin'$dateFin);
  1362.         if ($idAffectation) {
  1363.             $query->innerJoin('ui.idAffectation''affectation')
  1364.                 ->andWhere('affectation.idAffectation = :idAffectation');
  1365.             $query->setParameter('idAffectation'$idAffectation);
  1366.         }
  1367.         if ($idFederation) {
  1368.             $query->innerJoin('ui.idFederation''federation')
  1369.                 ->andWhere('federation.idFederation = :idFederation')
  1370.                 ->setParameter('idFederation'$idFederation);
  1371.         }
  1372.         if ($idPoste) {
  1373.             $query->innerJoin('ui.idPoste''poste')
  1374.                 ->andWhere('poste.idPoste = :idPoste')
  1375.                 ->setParameter(':idPoste'$idPoste);
  1376.         }
  1377.         if ($idFop) {
  1378.             $query->innerJoin('App\Entity\ProjetLettreMission''plm''WITH''ui.idUtilisateur = plm.idUtilisateur')
  1379.                 ->andWhere('plm.idFop = :idFop')
  1380.                 ->andWhere('plm.dateDebut <= :dateDebut')
  1381.                 ->andWhere('plm.dateFin >= :dateFin')
  1382.                 ->andWhere('plm.idWorkflow = 7')
  1383.                 ->setParameter('idFop'$idFop);
  1384.         }
  1385.         $query->groupBy('utilisateur.idUtilisateur,act.idAction');
  1386.         return $query->getQuery()->getScalarResult();
  1387.     }
  1388.     public function getInfosCtsForStatistiqueActionPerimetre($dateDebut$dateFin$idAffectation null$idFederation null$idPoste null$idFop null)
  1389.     {
  1390.         $query $this->createQueryBuilder('ui')
  1391.             ->select('utilisateur.idUtilisateur AS user , act.idAction, ev.idPerimetre')
  1392.             ->innerJoin('App\Entity\Evenement''ev''WITH''ui.idUtilisateur = ev.idUtilisateur')
  1393.             ->innerJoin('App\Entity\RefAction''act''WITH''ev.idAction = act.idAction')
  1394.             ->innerJoin('ui.utilisateur''utilisateur')
  1395.             ->Where('ev.date BETWEEN :dateDebut AND :dateFin')
  1396.             ->andWhere('ev.finEvenement BETWEEN :dateDebut AND :dateFin')
  1397.             ->andWhere('ev.action IS NOT NULL')
  1398.             ->andWhere('ev.idPerimetre IS NOT NULL')
  1399.             ->distinct('ui.idUtilisateur')
  1400.             ->setParameter('dateDebut'$dateDebut)
  1401.             ->setParameter('dateFin'$dateFin);
  1402.         if ($idAffectation) {
  1403.             $query->innerJoin('ui.idAffectation''affectation')
  1404.                 ->andWhere('affectation.idAffectation = :idAffectation');
  1405.             $query->setParameter('idAffectation'$idAffectation);
  1406.         }
  1407.         if ($idFederation) {
  1408.             $query->innerJoin('ui.idFederation''federation')
  1409.                 ->andWhere('federation.idFederation = :idFederation')
  1410.                 ->setParameter('idFederation'$idFederation);
  1411.         }
  1412.         if ($idPoste) {
  1413.             $query->innerJoin('ui.idPoste''poste')
  1414.                 ->andWhere('poste.idPoste = :idPoste')
  1415.                 ->setParameter(':idPoste'$idPoste);
  1416.         }
  1417.         if ($idFop) {
  1418.             $query->innerJoin('App\Entity\ProjetLettreMission''plm''WITH''ui.idUtilisateur = plm.idUtilisateur')
  1419.                 ->andWhere('plm.idFop = :idFop')
  1420.                 ->andWhere('plm.dateDebut <= :dateDebut')
  1421.                 ->andWhere('plm.dateFin >= :dateFin')
  1422.                 ->andWhere('plm.idWorkflow = 7')
  1423.                 ->setParameter('idFop'$idFop);
  1424.         }
  1425.         $query->groupBy('utilisateur.idUtilisateur,act.idAction,ev.idPerimetre');
  1426.         return $query->getQuery()->getScalarResult();
  1427.     }
  1428.     public function findActionByMonths($dateDebut$dateFin$idAffectation null$idFederation null$idPoste null$idFop null)
  1429.     {
  1430.         $query $this->createQueryBuilder('ui')
  1431.             ->select('utilisateur.idUtilisateur AS user , act.idAction, ev.idPerimetre,ev.date,ev.finEvenement')
  1432.             ->innerJoin('App\Entity\Evenement''ev''WITH''ui.idUtilisateur = ev.idUtilisateur')
  1433.             ->innerJoin('App\Entity\RefAction''act''WITH''ev.idAction = act.idAction')
  1434.             ->innerJoin('ui.utilisateur''utilisateur')
  1435.             ->Where('ev.date BETWEEN :dateDebut AND :dateFin')
  1436.             ->andWhere('ev.finEvenement BETWEEN :dateDebut AND :dateFin')
  1437.             ->andWhere('ev.action IS NOT NULL')
  1438.             ->andWhere('ev.idPerimetre IS NOT NULL')
  1439.             ->distinct('ui.idUtilisateur')
  1440.             ->setParameter('dateDebut'$dateDebut)
  1441.             ->setParameter('dateFin'$dateFin);
  1442.         if ($idAffectation) {
  1443.             $query->innerJoin('ui.idAffectation''affectation')
  1444.                 ->andWhere('affectation.idAffectation = :idAffectation');
  1445.             $query->setParameter('idAffectation'$idAffectation);
  1446.         }
  1447.         if ($idFederation) {
  1448.             $query->innerJoin('ui.idFederation''federation')
  1449.                 ->andWhere('federation.idFederation = :idFederation')
  1450.                 ->setParameter('idFederation'$idFederation);
  1451.         }
  1452.         if ($idPoste) {
  1453.             $query->innerJoin('ui.idPoste''poste')
  1454.                 ->andWhere('poste.idPoste = :idPoste')
  1455.                 ->setParameter(':idPoste'$idPoste);
  1456.         }
  1457.         if ($idFop) {
  1458.             $query->innerJoin('App\Entity\ProjetLettreMission''plm''WITH''ui.idUtilisateur = plm.idUtilisateur')
  1459.                 ->andWhere('plm.idFop = :idFop')
  1460.                 ->andWhere('plm.dateDebut <= :dateDebut')
  1461.                 ->andWhere('plm.dateFin >= :dateFin')
  1462.                 ->andWhere('plm.idWorkflow = 7')
  1463.                 ->setParameter('idFop'$idFop);;
  1464.         }
  1465.         $query->groupBy('utilisateur.idUtilisateur,act.idAction,ev.idPerimetre,ev.date,ev.finEvenement');
  1466.         return $query->getQuery()->getScalarResult();
  1467.     }
  1468.     public function getInfosCtsForStatistiqueRation($dateDebut$dateFin$idAffectation null$idFederation null$idPoste null$idFop null)
  1469.     {
  1470.         $query $this->createQueryBuilder('ui')
  1471.             ->select('utilisateur.idUtilisateur AS user , act.idAction, ev.idPerimetre,ev.date,ev.heureDebut,ev.heureFin,ev.finEvenement')
  1472.             ->innerJoin('App\Entity\Evenement''ev''WITH''ui.idUtilisateur = ev.idUtilisateur')
  1473.             ->innerJoin('App\Entity\RefAction''act''WITH''ev.idAction = act.idAction')
  1474.             ->innerJoin('ui.utilisateur''utilisateur')
  1475.             ->Where('ev.date >= :dateDebut')
  1476.             ->andWhere('ev.finEvenement <= :dateFin')
  1477.             ->andWhere('ev.action IS NOT NULL')
  1478.             ->andWhere('ev.idPerimetre IS NOT NULL')
  1479.             ->distinct('ui.idUtilisateur')
  1480.             ->setParameter('dateDebut'$dateDebut)
  1481.             ->setParameter('dateFin'$dateFin);
  1482.         if ($idAffectation) {
  1483.             $query->innerJoin('ui.idAffectation''affectation')
  1484.                 ->andWhere('affectation.idAffectation = :idAffectation');
  1485.             $query->setParameter('idAffectation'$idAffectation);
  1486.         }
  1487.         if ($idFederation) {
  1488.             $query->innerJoin('ui.idFederation''federation')
  1489.                 ->andWhere('federation.idFederation = :idFederation')
  1490.                 ->setParameter('idFederation'$idFederation);
  1491.         }
  1492.         if ($idPoste) {
  1493.             $query->innerJoin('ui.idPoste''poste')
  1494.                 ->andWhere('poste.idPoste = :idPoste')
  1495.                 ->setParameter(':idPoste'$idPoste);
  1496.         }
  1497.         if ($idFop) {
  1498.             $query->innerJoin('App\Entity\ProjetLettreMission''plm''WITH''ui.idUtilisateur = plm.idUtilisateur')
  1499.                 ->andWhere('plm.idFop = :idFop')
  1500.                 ->andWhere('plm.dateDebut <= :dateDebut')
  1501.                 ->andWhere('plm.dateFin >= :dateFin')
  1502.                 ->andWhere('plm.idWorkflow = 7')
  1503.                 ->setParameter('idFop'$idFop);
  1504.         }
  1505.         $query->groupBy('utilisateur.idUtilisateur,act.idAction,ev.idPerimetre,ev.date,ev.heureDebut,ev.heureFin,ev.finEvenement');
  1506.         return $query->getQuery()->getScalarResult();
  1507.     }
  1508.     public function getFederationByDr($idAffectation)
  1509.     {
  1510.         $em $this->getEntityManager();
  1511.         $connection $em->getConnection();
  1512.         $statement $connection->prepare("select distinct(id_federation) from utilisateur_information ui
  1513.         INNER JOIN utilisateur u ON ui.id_utilisateur = u.id_utilisateur
  1514.         where id_affectation = " $idAffectation " and id_federation IS NOT NULL and id_role IN (5,2)");
  1515.         $resultSet $statement->executeQuery();
  1516.         return $resultSet->fetchAllAssociative();
  1517.     }
  1518.     /**
  1519.      * Requête pour récuperer la liste de fédérations des utilisateurs selon ses affectations
  1520.      * @param $idAffectation
  1521.      * @return string
  1522.      */
  1523.     public function queryFederationByDr($idAffectation)
  1524.     {
  1525.         $query "SELECT DISTINCT (ui.id_federation) FROM utilisateur_information ui
  1526.         INNER JOIN utilisateur u ON ui.id_utilisateur = u.id_utilisateur
  1527.         WHERE ui.id_affectation = " $idAffectation " AND ui.id_federation IS NOT NULL"
  1528.             " AND u.id_role IN (" RefRole::ROLE_FEDE "," RefRole::ROLE_CTS ")";
  1529.         return $query;
  1530.     }
  1531.     public function loadUserByUsername($username)
  1532.     {
  1533.         return $this->createQueryBuilder('u')
  1534.             ->where('u.login = :username')
  1535.             ->andWhere('u.utilisateurActif = true')
  1536.             ->setParameter('username'$username)
  1537.             ->getQuery()
  1538.             ->getOneOrNullResult();
  1539.     }
  1540.     public function getLoginLike($username)
  1541.     {
  1542.         return $this->createQueryBuilder('u')
  1543.             ->where('u.login like :username')
  1544.             ->setParameter('username'$username '%')
  1545.             ->getQuery()
  1546.             ->getResult();
  1547.     }
  1548.     public function isLoginAlreadyExist($current_user$login)
  1549.     {
  1550.         $query $this->createQueryBuilder('u')
  1551.             ->select('COUNT(u.idInformationPersonnelle) AS nb_user')
  1552.             ->where('u.idInformationPersonnelle != :current_user')
  1553.             ->andWhere('u.login = :login')
  1554.             ->setParameter('current_user'$current_user)
  1555.             ->setParameter('login'$login)
  1556.             ->getQuery();
  1557.         $result $query->getArrayResult();
  1558.         return (!empty($result[0]) && $result[0]['nb_user'] > true false);
  1559.     }
  1560.     /**
  1561.      * Generate random password
  1562.      *
  1563.      * @param $length
  1564.      * @return string
  1565.      */
  1566.     private function randomPassword($length)
  1567.     {
  1568.         $symbols = [];
  1569.         $used_symbols '';
  1570.         $symbols["lower_case"] = 'abcdefghijklmnopqrstuvwxyz';
  1571.         $symbols["upper_case"] = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  1572.         $symbols["numbers"] = '1234567890';
  1573.         $symbols["special_symbols"] = '!?@#-_+<>[]{}';
  1574.         $used_symbols .= $symbols["lower_case"] . $symbols["upper_case"] . $symbols["numbers"] . $symbols["special_symbols"];
  1575.         $symbols_length strlen($used_symbols) - 1//strlen starts from 0 so to get number of characters deduct 1
  1576.         $n_lc random_int(0strlen($symbols["lower_case"]) - 1);
  1577.         $n_uc random_int(0strlen($symbols["upper_case"]) - 1);
  1578.         $n_num random_int(0strlen($symbols["numbers"]) - 1);
  1579.         $n_ss random_int(0strlen($symbols["special_symbols"]) - 1);
  1580.         $requires 4;
  1581.         $rest $length $requires;
  1582.         //Get the requires characters
  1583.         $pass $symbols["lower_case"][$n_lc] . $symbols["upper_case"][$n_uc] . $symbols["numbers"][$n_num] . $symbols["special_symbols"][$n_ss];
  1584.         for ($i 0$i $rest$i++) {
  1585.             $n random_int(0$symbols_length); // get a random character from the string with all characters
  1586.             $pass .= $used_symbols[$n]; // add the character to the password string
  1587.         }
  1588.         return str_shuffle($pass); // return the generated password
  1589.     }
  1590.     /**
  1591.      * Get manager by an affectation
  1592.      */
  1593.     public function getManagerEmailByAffectation(RefAffectationController $affectation)
  1594.     {
  1595.         $emails = [];
  1596.         $query $this->createQueryBuilder('ui')
  1597.             ->select('u.courriel')
  1598.             ->innerJoin('ui.utilisateur''u')
  1599.             ->where('u.idRole IN (1, 3, 4, 10, 11)')
  1600.             ->andWhere('ui.idAffectation = :affectation')
  1601.             ->andWhere('u.flSuperieurHierarchique = true')
  1602.             ->setParameter(':affectation'$affectation);
  1603.         $result $query->getQuery()->getResult();
  1604.         foreach ($result as $item) {
  1605.             $emails[] = $item['courriel'];
  1606.         }
  1607.         return $emails;
  1608.     }
  1609.     /**
  1610.      * Count user affected to fede
  1611.      */
  1612.     public function getNbUsersByFede($idFederation)
  1613.     {
  1614.         $query $this->createQueryBuilder('ui')
  1615.             ->select('COUNT(ui.idInformationPersonnelle) AS nb_users')
  1616.             ->where('ui.idFederation = :idFederation')
  1617.             ->setParameter('idFederation'$idFederation)
  1618.             ->getQuery();
  1619.         $result $query->getResult();
  1620.         return $result[0]['nb_users'];
  1621.     }
  1622.     public function getMyCtsDayOffInformation(
  1623.         $federation,
  1624.         $affectation,
  1625.         int $year,
  1626.         $archive,
  1627.         $typeCalendrier
  1628.     ) {
  1629.         $dateDebutYear null;
  1630.         $dateFinYear null;
  1631.         $dateDebutLastYear null;
  1632.         $archive = ($archive == "1") ? true false;
  1633.         // $calendrier_scolaire = ($affectation) ? $affectation->getCalendrierScolaire() : false;
  1634.         // $calendrierAffectation = ($calendrier_scolaire) ? "s" : "c";
  1635.         // $yearBascule = ($affectation) ? $affectation->getDateBascule() : null;
  1636.         // $yearBascule = ($yearBascule !== null) ? $yearBascule->format('Y') : null;
  1637.         if ($affectation) {
  1638.             $Idaffectation $affectation->getIdAffectation();
  1639.             $getRefCalendrier =  $this->getEntityManager()
  1640.                 ->getRepository(RefAffectationCalendrier::class)
  1641.                 ->getRefCalendrier($Idaffectation);
  1642.             $calendrierAffectation = ($getRefCalendrier['calendrierAffectation']) ? "s" "c";
  1643.             $yearBascule $getRefCalendrier['yearBascule'];
  1644.         } else {
  1645.             $yearBascule null;
  1646.             $calendrier_scolaire false;
  1647.             $calendrierAffectation = ($calendrier_scolaire) ? "s" "c";
  1648.         }
  1649.         $lastYear $year 1;
  1650.         $nextYear $year 1;
  1651.         $beforeLastYear $year 2;
  1652.         // if($affectation) {        
  1653.         if ($calendrierAffectation == "s") {
  1654.             if (($archive) && ($typeCalendrier == "s")) {
  1655.                 $dateDebutYear = new \DateTime("$lastYear-09-01");
  1656.                 $dateFinYear = new \DateTime("$year-08-31");
  1657.                 $dateDebutLastYear = new \DateTime("$beforeLastYear-09-01");
  1658.                 $dateFinLastYear = new \DateTime("$lastYear-08-31");
  1659.                 $labelDate "07/09/$lastYear au 31/08/$year";
  1660.             } elseif (($archive) && ($typeCalendrier == "c")) {
  1661.                 $dateDebutYear = new \DateTime("$year-01-01");
  1662.                 $dateFinYear = new \DateTime("$year-12-31");
  1663.                 $dateDebutLastYear = new \DateTime("$lastYear-01-01");
  1664.                 $dateFinLastYear = new \DateTime("$lastYear-12-31");
  1665.                 $labelDate "01/01/$year au 31/12/$year";
  1666.             } elseif ($year $yearBascule) {
  1667.                 /* !!! */ // Transition  
  1668.                 $dateDebutYear = new \DateTime("$nextYear-01-01");
  1669.                 $dateFinYear = new \DateTime("$nextYear-08-31");
  1670.                 $dateDebutLastYear = new \DateTime("$year-01-01");
  1671.                 $dateFinLastYear = new \DateTime("$year-08-31");
  1672.                 $labelDate "01/01/$nextYear au 31/08/$nextYear";
  1673.             } elseif ($year >= $yearBascule) {
  1674.                 $dateDebutYear = new \DateTime("$year-09-01");
  1675.                 $dateFinYear = new \DateTime("$nextYear-08-31");
  1676.                 $dateDebutLastYear = new \DateTime("$year-09-01");
  1677.                 $dateFinLastYear = new \DateTime("$nextYear-08-31");
  1678.                 $labelDate "01/09/$year au 31/08/$nextYear";
  1679.             } else {
  1680.                 $dateDebutYear = new \DateTime("$nextYear-01-01");
  1681.                 $dateFinYear = new \DateTime("$nextYear-08-31");
  1682.                 $dateDebutLastYear = new \DateTime("$year-01-01");
  1683.                 $dateFinLastYear = new \DateTime("$year-08-31");
  1684.                 $labelDate "01/01/$year au 31/08/$year";
  1685.             }
  1686.         }
  1687.         // calendrier civil
  1688.         else {
  1689.             if (!$archive && $year <= $yearBascule) {
  1690.                 /* !!! */
  1691.                 $dateDebutYear = new \DateTime("$nextYear-09-01");
  1692.                 $dateFinYear = new \DateTime("$nextYear-12-31");
  1693.                 $dateDebutLastYear = new \DateTime("$year-09-01");
  1694.                 $dateFinLastYear = new \DateTime("$year-12-31");
  1695.                 $labelDate "01/09/$nextYear au 31/12/$nextYear";
  1696.             } else {
  1697.                 // $affichePeriode = $year;
  1698.                 $dateDebutYear = new \DateTime("$year-01-01");
  1699.                 $dateFinYear = new \DateTime("$year-12-31");
  1700.                 $dateDebutLastYear = new \DateTime("$lastYear-01-01");
  1701.                 $dateFinLastYear = new \DateTime("$lastYear-12-31");
  1702.                 $labelDate "01/01/$year au 31/12/$year";
  1703.             }
  1704.         }
  1705.         //   }
  1706.         //         if($federation){
  1707.         //         $dateDebutYear = ($calendrier_scolaire)? new \DateTime("$year-09-01"):new \DateTime("$year-01-01");
  1708.         //         $dateFinYear = ($calendrier_scolaire)?new \DateTime("$nextYear-08-31"):new \DateTime("$year-12-31");
  1709.         //         $dateDebutLastYear = ($calendrier_scolaire)?new \DateTime("$lastYear-09-01"):new \DateTime("$lastYear-01-01");
  1710.         //         $dateFinLastYear = ($calendrier_scolaire)?new \DateTime("$year-08-31"):new \DateTime("$lastYear-12-31");
  1711.         // }
  1712.         $qb $this->createQueryBuilder('ui')
  1713.             ->select('ui.nom, ui.prenom, p.libellePoste, ra.libelleLong ,r_f.rSerLibl AS LibelleFederation')
  1714.             // ->addselect('
  1715.             //     (SELECT refAff.calendrierScolaire
  1716.             //     FROM App\Entity\RefAffectation refAff
  1717.             //     WHERE refAff.idAffectation = :affectation
  1718.             //     ) as calendrierscolaire')
  1719.             ->addSelect('
  1720.                 (SELECT cdaCal.typeCalendrier 
  1721.                 FROM App\Entity\CongeDroitAnnuel cdaCal
  1722.                 JOIN cdaCal.congeType calRtt
  1723.                 WHERE cdaCal.annee = :year
  1724.                 AND cdaCal.archive = :archive
  1725.                 AND cdaCal.utilisateur = ui.utilisateur
  1726.                 AND calRtt.code = :rtt
  1727.                 ) as calendrierscolaire
  1728.             ')
  1729.             // ajout CET
  1730.             ->addSelect('
  1731.                 (SELECT cdaCet.nbJourTotal
  1732.                  FROM App\Entity\CongeDroitAnnuel cdaCet
  1733.                  JOIN cdaCet.congeType ctCet
  1734.                  WHERE cdaCet.annee = :year
  1735.                  AND cdaCet.utilisateur = ui.utilisateur
  1736.                  AND cdaCet.archive = :archive
  1737.                  AND ctCet.code = :cet
  1738.                  ) as totalCet
  1739.             ')
  1740.             ->addSelect('
  1741.                 (SELECT sum(cCet.nbJour)
  1742.                  FROM App\Entity\Conge cCet
  1743.                  JOIN cCet.congeType ctGivenCet
  1744.                  WHERE cCet.utilisateur = ui.utilisateur
  1745.                  AND cCet.dateDebut >= :dateDebut AND cCet.dateDebut <= :dateFin
  1746.                  AND ctGivenCet.code = :cet
  1747.                  AND cCet.workflow IN( :workflow )
  1748.                  ) as givenCet
  1749.             ')
  1750.             // fin CET
  1751.             ->addSelect('
  1752.                 (SELECT cdaRtt.nbJourTotal
  1753.                  FROM App\Entity\CongeDroitAnnuel cdaRtt
  1754.                  JOIN cdaRtt.congeType ctRtt
  1755.                  WHERE cdaRtt.annee = :year
  1756.                  AND cdaRtt.archive = :archive
  1757.                  AND cdaRtt.utilisateur = ui.utilisateur
  1758.                  AND ctRtt.code = :rtt
  1759.                  ) as totalRtt
  1760.             ')
  1761.             ->addSelect('
  1762.                 (SELECT sum(cRtt.nbJour)
  1763.                  FROM App\Entity\Conge cRtt
  1764.                  JOIN cRtt.congeType ctGivenRtt
  1765.                  WHERE cRtt.utilisateur = ui.utilisateur
  1766.                  AND cRtt.dateDebut >= :dateDebut AND cRtt.dateDebut <= :dateFin
  1767.                  AND ctGivenRtt.code = :rtt
  1768.                  AND cRtt.workflow IN( :workflow )
  1769.                  ) as givenRtt
  1770.             ')
  1771.             ->addSelect('
  1772.                 (SELECT rpt.nbJourTotal
  1773.                  FROM App\Entity\CongeDroitAnnuel rpt
  1774.                  JOIN rpt.congeType ctRAA
  1775.                  WHERE rpt.utilisateur = ui.utilisateur
  1776.                  AND rpt.annee = :year
  1777.                  AND rpt.archive = :archive
  1778.                  AND ctRAA.code = :RAA
  1779.                  ) as totalReport
  1780.             ')
  1781.             ->addSelect('
  1782.             (SELECT sum(cRAA.nbJour)
  1783.              FROM App\Entity\Conge cRAA
  1784.              JOIN cRAA.congeType ctGivenRAA
  1785.              WHERE cRAA.utilisateur = ui.utilisateur
  1786.              AND cRAA.dateDebut >= :dateDebut AND cRAA.dateDebut <= :dateFin
  1787.              AND ctGivenRAA.code = :RAA
  1788.              AND cRAA.workflow IN( :workflow ) 
  1789.              ) as givenRaa
  1790.         ')
  1791.             ->addSelect('
  1792.                 (SELECT cdaCa.nbJourTotal
  1793.                  FROM App\Entity\CongeDroitAnnuel cdaCa
  1794.                  JOIN cdaCa.congeType ctCa
  1795.                  WHERE cdaCa.annee = :year
  1796.                  AND cdaCa.utilisateur = ui.utilisateur
  1797.                  AND cdaCa.archive = :archive
  1798.                  AND ctCa.code = :can
  1799.                  ) as totalCa
  1800.             ')
  1801.             ->addSelect('
  1802.                 (SELECT sum(cCa.nbJour)
  1803.                  FROM App\Entity\Conge cCa
  1804.                  JOIN cCa.congeType ctGivenCa
  1805.                  WHERE cCa.utilisateur = ui.utilisateur
  1806.                  AND cCa.dateDebut >= :dateDebut AND cCa.dateDebut <= :dateFin
  1807.                  AND ctGivenCa.code = :can
  1808.                  AND cCa.workflow IN( :workflow )
  1809.                  ) as givenCa
  1810.             ')
  1811.             ->addSelect('
  1812.                 (SELECT cdaFracLastYear.nbJourFractionnement
  1813.                  FROM App\Entity\CongeDroitAnnuel cdaFracLastYear
  1814.                  JOIN cdaFracLastYear.congeType ctFracLastYear
  1815.                  WHERE cdaFracLastYear.utilisateur = ui.utilisateur
  1816.                  AND cdaFracLastYear.annee = :lastYear
  1817.                  AND cdaFracLastYear.archive = :archive
  1818.                  AND ctFracLastYear.code = :can
  1819.                  ) as totalFracLastYear
  1820.             ')
  1821.             ->addSelect('
  1822.                 (SELECT sum(cCex.nbJour)
  1823.                  FROM App\Entity\Conge cCex
  1824.                  JOIN cCex.congeType ctGivenCex
  1825.                  WHERE cCex.utilisateur = ui.utilisateur
  1826.                  AND cCex.dateDebut >= :dateDebut AND cCex.dateDebut <= :dateFin
  1827.                  AND ctGivenCex.code = :cex
  1828.                  AND cCex.workflow IN( :workflow )
  1829.                  ) as givenCex
  1830.             ')
  1831.             ->addSelect('
  1832.                 (SELECT cdaFrac.nbJourFractionnement
  1833.                 FROM App\Entity\CongeDroitAnnuel cdaFrac
  1834.                 JOIN cdaFrac.congeType ctFrac
  1835.                 WHERE cdaFrac.utilisateur = ui.utilisateur
  1836.                 AND cdaFrac.annee = :year
  1837.                 AND cdaFrac.archive = :archive
  1838.                 AND ctFrac.code = :can
  1839.                 ) as totalFrac
  1840.             ')
  1841.             ->addSelect('
  1842.                 (SELECT cdaCaLastYear.nbJourTotal
  1843.                 FROM App\Entity\CongeDroitAnnuel cdaCaLastYear
  1844.                 JOIN cdaCaLastYear.congeType ctCaLastYear
  1845.                 WHERE cdaCaLastYear.utilisateur = ui.utilisateur
  1846.                 AND cdaCaLastYear.annee = :lastYear
  1847.                 AND cdaCaLastYear.archive = :archive
  1848.                 AND ctCaLastYear.code = :can
  1849.                 ) as totalCanLastYear
  1850.             ')
  1851.             ->addSelect('
  1852.                 (SELECT sum(congeCa.nbJour)
  1853.                 FROM App\Entity\Conge congeCa
  1854.                 JOIN congeCa.congeType ctCongeCa
  1855.                 WHERE congeCa.utilisateur = ui.utilisateur
  1856.                 AND congeCa.dateDebut >= :lastYearDateDebut AND congeCa.dateDebut <= :lastYearDateFin
  1857.                 AND ctCongeCa.code = :can
  1858.                 AND congeCa.workflow IN( :workflow )
  1859.                 ) as givenCanLastYear
  1860.             ')
  1861.             ->addSelect('
  1862.                 (SELECT sum(demandeReport.nbJour)
  1863.                 FROM App\Entity\DemandeReport demandeReport
  1864.                 WHERE demandeReport.utilisateur = ui.utilisateur
  1865.                 AND demandeReport.annee = :year
  1866.                 AND demandeReport.workflow IN( :workflow )
  1867.                 ) as givenRAANextYear
  1868.             ');
  1869.         $qb
  1870.             ->innerJoin('ui.utilisateur''u')
  1871.             ->innerJoin('ui.idPoste''p')
  1872.             ->innerJoin('ui.idAffectation''ra')
  1873.             ->innerJoin('ui.idFederation''rf')
  1874.             ->leftJoin('App\Entity\RFederation''r_f''WITH''rf.rAdmDiside = r_f.rAdmDiside')
  1875.             ->where('ui.idPoste IS NOT NULL')
  1876.             ->andWhere('ui.utilisateurActif = true');
  1877.         if ($federation) {
  1878.             $qb
  1879.                 ->andWhere('ui.idFederation = :federation')
  1880.                 ->andWhere('u.role = :role')
  1881.                 ->setParameter('federation'$federation)
  1882.                 ->setParameter('role'RefRole::ROLE_CTS);
  1883.         } else if ($affectation) {
  1884.             $qb
  1885.                 ->andWhere('ui.idAffectation = :affectation')
  1886.                 ->setParameter('affectation'$affectation);
  1887.         }
  1888.         $qb
  1889.             ->setParameter('year'$year)
  1890.             ->setParameter('rtt''RTT')
  1891.             ->setParameter('can''CAN')
  1892.             ->setParameter('RAA''RAA')
  1893.             ->setParameter('cex''CEX')
  1894.             ->setParameter('cet''CET')
  1895.             ->setParameter('dateDebut', ($dateDebutYear))
  1896.             ->setParameter('dateFin', ($dateFinYear))
  1897.             ->setParameter('workflow', [Workflow::CO_ACCEPTEDWorkflow::CO_SIGNWorkflow::RE_SIGN], \Doctrine\DBAL\Connection::PARAM_STR_ARRAY)
  1898.             ->setParameter('lastYearDateDebut', ($dateDebutLastYear))
  1899.             ->setParameter('lastYearDateFin', ($dateFinLastYear))
  1900.             ->setParameter('lastYear'$lastYear)
  1901.             // ->setParameter('affectation', $affectation)
  1902.             ->setParameter('archive'$archive);
  1903.         $qb->orderBy('ui.nom, ui.prenom''DESC');
  1904.         $result $qb->getQuery()->getResult();
  1905.         $result["labelDate"] = $labelDate;
  1906.         return $result;
  1907.     }
  1908.     /**
  1909.      * @param int $year
  1910.      * @return mixed
  1911.      * @throws \Doctrine\ORM\NonUniqueResultException
  1912.      */
  1913.     public function getInfos(
  1914.         Utilisateur $user,
  1915.         ?int $year,
  1916.         ?bool $archive false
  1917.     ) {
  1918.         // $ui = $this->getEntityManager()->getRepository(UtilisateurInformation::class)
  1919.         //     ->findOneBy(["utilisateur" => $user->getIdUtilisateur()]);
  1920.         // $affectation = $ui->getIdAffectation();
  1921.         $utilisateurInformation $this->getEntityManager()->getRepository(UtilisateurInformation::class)
  1922.             ->findOneBy(["idUtilisateur" => $user->getIdUtilisateur()]);
  1923.         $Idaffectation $utilisateurInformation->getIdAffectation()->getIdAffectation();
  1924.         $getRefCalendrier =  $this->getEntityManager()
  1925.             ->getRepository(RefAffectationCalendrier::class)
  1926.             ->getRefCalendrier($Idaffectation);
  1927.         $affectationCalendrier = ($getRefCalendrier['calendrierAffectation']) ? "s" "c";
  1928.         $yearBascule $getRefCalendrier['yearBascule'];
  1929.         $dateBascule $getRefCalendrier['dateBascule'];
  1930.         $affectationDateBascule $dateBascule;
  1931.         $currentDate = new \DateTime();
  1932.         $currentDate $currentDate->format('Y-m-d');
  1933.         $cda_year $this->getEntityManager()->getRepository(CongeDroitAnnuel::class)
  1934.             ->findOneBy(["utilisateur" => $user->getIdUtilisateur(), "annee" => $year"archive" => $archive]);
  1935.         $calendrier_year = ($cda_year) ? $cda_year->getTypeCalendrier() : $affectationCalendrier;
  1936.         // $affectation = $this->getEntityManager()
  1937.         //     ->getRepository(RefAffectation::class)
  1938.         //     ->findOneBy(["idAffectation" => $Idaffectation]);
  1939.         // $dateBascule = $affectation->getDateBascule();
  1940.         // if ($dateBascule) {
  1941.         //     $yearBascule = intval($dateBascule->format('Y'));
  1942.         // } else {
  1943.         //     $yearBascule = null;
  1944.         // }
  1945.         $lastYear $year 1;
  1946.         $nextYear $year 1;
  1947.         $beforeLastYear $year 2;
  1948.         // calendrier scolaire
  1949.         if ($affectationCalendrier == "s") {
  1950.             if ($archive && ($calendrier_year == "c")) {
  1951.                 $dateDebut = new \DateTime("$year-01-01");
  1952.                 $dateFin = new \DateTime("$year-12-31");
  1953.                 $lastYearDateDebut = new \DateTime("$lastYear-01-01");
  1954.                 $lastYearDateFin = new \DateTime("$lastYear-12-31");
  1955.             } elseif ($archive && ($calendrier_year == "s")) {
  1956.                 $dateDebut = new \DateTime("$lastYear-09-01");
  1957.                 $dateFin = new \DateTime("$year-08-31");
  1958.                 $lastYearDateDebut = new \DateTime("$beforeLastYear-09-01");
  1959.                 $lastYearDateFin = new \DateTime("$lastYear-08-31");
  1960.             } elseif (!$archive && ($calendrier_year == "c") && ($year == $yearBascule 1)) {
  1961.                 //Transition
  1962.                 $dateDebut = new \DateTime("$nextYear-01-01");
  1963.                 $dateFin = new \DateTime("$nextYear-08-31");
  1964.                 $lastYearDateDebut = new \DateTime("$year-01-01");
  1965.                 $lastYearDateFin = new \DateTime("$year-08-31");
  1966.             } elseif ($year >= $yearBascule) {
  1967.                 $dateDebut = new \DateTime("$year-09-01");
  1968.                 $dateFin = new \DateTime("$nextYear-08-31");
  1969.                 $lastYearDateDebut = new \DateTime("$lastYear-09-01");
  1970.                 $lastYearDateFin = new \DateTime("$year-08-31");
  1971.             } else {
  1972.                 $dateDebut = new \DateTime("$year-09-01");
  1973.                 $dateFin = new \DateTime("$nextYear-08-31");
  1974.                 $lastYearDateDebut = new \DateTime("$lastYear-09-01");
  1975.                 $lastYearDateFin = new \DateTime("$year-08-31");
  1976.             }
  1977.         }
  1978.         // calendrier civil
  1979.         else {
  1980.             if ($archive) {
  1981.                 $dateDebut = new \DateTime("$year-01-01");
  1982.                 $dateFin = new \DateTime("$year-12-31");
  1983.                 $lastYearDateDebut = new \DateTime("$lastYear-01-01");
  1984.                 $lastYearDateFin = new \DateTime("$lastYear-12-31");
  1985.             } elseif ($year <= $yearBascule && ($calendrier_year == "s")) {
  1986.                 //Transition 
  1987.                 $dateDebut = new \DateTime("$year-09-01");
  1988.                 $dateFin = new \DateTime("$nextYear-01-01");
  1989.                 $lastYearDateDebut = new \DateTime("$year-01-01");
  1990.                 $lastYearDateFin = new \DateTime("$year-08-31");
  1991.             } elseif ($year <= $yearBascule && ($calendrier_year == "c")) {
  1992.                 $dateDebut = new \DateTime("$nextYear-01-01");
  1993.                 $dateFin = new \DateTime("$nextYear-12-31");
  1994.                 $lastYearDateDebut = new \DateTime("$year-01-01");
  1995.                 $lastYearDateFin = new \DateTime("$year-08-31");
  1996.             } else {
  1997.                 $dateDebut = new \DateTime("$year-01-01");
  1998.                 $dateFin = new \DateTime("$year-12-31");
  1999.                 $lastYearDateDebut = new \DateTime("$lastYear-01-01");
  2000.                 $lastYearDateFin = new \DateTime("$lastYear-12-31");
  2001.             }
  2002.         }
  2003.         $query $this->createQueryBuilder('ui')
  2004.             ->select('ui.nom, ui.prenom, p.libellePoste, ra.libelleLong  as affectation, IDENTITY(ui.idFederation) as federation')
  2005.             ->addSelect('
  2006.                 (SELECT cdaCan.nbJourTotal
  2007.                  FROM App\Entity\CongeDroitAnnuel cdaCan
  2008.                  JOIN cdaCan.congeType ctCan
  2009.                  WHERE cdaCan.utilisateur = ui.utilisateur
  2010.                  AND cdaCan.annee = :year
  2011.                  AND cdaCan.archive = :archive
  2012.                  AND ctCan.code = :can
  2013.                  ) as totalCan
  2014.             ')
  2015.             ->addSelect('
  2016.                 (SELECT sum(cCa.nbJour)
  2017.                  FROM App\Entity\Conge cCa
  2018.                  JOIN cCa.congeType ctGivenCa
  2019.                  WHERE cCa.utilisateur = ui.utilisateur
  2020.                  AND cCa.dateDebut >= :dateDebut AND cCa.dateDebut <= :dateFin
  2021.                  AND ctGivenCa.code = :can
  2022.                  AND cCa.workflow IN( :workflow ) 
  2023.                  ) as givenCan
  2024.             ')
  2025.             ->addSelect('
  2026.                 (SELECT cdaRtt.nbJourTotal
  2027.                  FROM App\Entity\CongeDroitAnnuel cdaRtt
  2028.                  JOIN cdaRtt.congeType ctRtt
  2029.                  WHERE cdaRtt.utilisateur = ui.utilisateur
  2030.                  AND cdaRtt.annee = :year
  2031.                  AND cdaRtt.archive = :archive
  2032.                  AND ctRtt.code = :rtt
  2033.                  ) as totalRtt
  2034.             ')
  2035.             ->addSelect('
  2036.                 (SELECT rpt.nbJourTotal
  2037.                  FROM App\Entity\CongeDroitAnnuel rpt
  2038.                  JOIN rpt.congeType ctRAA
  2039.                  WHERE rpt.utilisateur = ui.utilisateur
  2040.                  AND rpt.annee = :year
  2041.                  AND rpt.archive = :archive
  2042.                  AND ctRAA.code = :RAA
  2043.                  ) as totalReport
  2044.             ')
  2045.             ->addSelect('
  2046.                 (SELECT sum(cRAA.nbJour)
  2047.                 FROM App\Entity\Conge cRAA
  2048.                 JOIN cRAA.congeType ctGivenRAA
  2049.                 WHERE cRAA.utilisateur = ui.utilisateur
  2050.                 AND cRAA.dateDebut >= :dateDebut AND cRAA.dateDebut <= :dateFin
  2051.                 AND ctGivenRAA.code = :RAA
  2052.                 AND cRAA.workflow IN( :workflow ) 
  2053.                 ) as givenRaa
  2054.             ')
  2055.             ->addSelect('
  2056.                 (SELECT sum(cRtt.nbJour)
  2057.                  FROM App\Entity\Conge cRtt
  2058.                  JOIN cRtt.congeType ctGivenRtt
  2059.                  WHERE cRtt.utilisateur = ui.utilisateur
  2060.                  AND cRtt.dateDebut >= :dateDebut AND cRtt.dateDebut <= :dateFin
  2061.                  AND ctGivenRtt.code = :rtt
  2062.                  AND cRtt.workflow IN( :workflow ) 
  2063.                  ) as givenRtt
  2064.             ')
  2065.             ->addSelect('
  2066.                 (SELECT sum(cCex.nbJour)
  2067.                  FROM App\Entity\Conge cCex
  2068.                  JOIN cCex.congeType ctGivenCex
  2069.                  WHERE cCex.utilisateur = ui.utilisateur
  2070.                  AND cCex.dateDebut >= :dateDebut AND cCex.dateDebut <= :dateFin
  2071.                  AND ctGivenCex.code = :cex
  2072.                  AND cCex.workflow IN( :workflow ) 
  2073.                  ) as givenCex
  2074.             ')
  2075.             ->addSelect('
  2076.                 (SELECT cdaFrac.nbJourFractionnement
  2077.                  FROM App\Entity\CongeDroitAnnuel cdaFrac
  2078.                  JOIN cdaFrac.congeType ctFrac
  2079.                  WHERE cdaFrac.utilisateur = ui.utilisateur
  2080.                  AND cdaFrac.annee = :year
  2081.                  AND cdaFrac.archive = :archive
  2082.                  AND ctFrac.code = :can
  2083.                  ) as totalFrac
  2084.             ')
  2085.             ->addSelect('
  2086.                 (SELECT cdaCaLastYear.nbJourTotal
  2087.                  FROM App\Entity\CongeDroitAnnuel cdaCaLastYear
  2088.                  JOIN cdaCaLastYear.congeType ctCaLastYear
  2089.                  WHERE cdaCaLastYear.utilisateur = ui.utilisateur
  2090.                  AND cdaCaLastYear.annee = :lastYear
  2091.                  AND cdaCaLastYear.archive = :archive
  2092.                  AND ctCaLastYear.code = :can
  2093.                  ) as totalCanLastYear
  2094.             ')
  2095.             ->addSelect('
  2096.                 (SELECT sum(congeCa.nbJour)
  2097.                  FROM App\Entity\Conge congeCa
  2098.                  JOIN congeCa.congeType ctCongeCa
  2099.                  WHERE congeCa.utilisateur = ui.utilisateur
  2100.                  AND congeCa.dateDebut >= :lastYearDateDebut AND congeCa.dateDebut <= :lastYearDateFin
  2101.                  AND ctCongeCa.code = :can
  2102.                  AND congeCa.workflow IN( :workflow ) 
  2103.                  ) as givenCanLastYear
  2104.             ')
  2105.             // ajout CET
  2106.             ->addSelect('
  2107.              (SELECT cdaCet.nbJourTotal
  2108.               FROM App\Entity\CongeDroitAnnuel cdaCet
  2109.               JOIN cdaCet.congeType ctCet
  2110.               WHERE cdaCet.annee = :year
  2111.               AND cdaCet.utilisateur = ui.utilisateur
  2112.               AND cdaCet.archive = :archive
  2113.               AND ctCet.code = :cet
  2114.               ) as totalCet
  2115.          ')
  2116.             ->addSelect('
  2117.              (SELECT sum(cCet.nbJour)
  2118.               FROM App\Entity\Conge cCet
  2119.               JOIN cCet.congeType ctGivenCet
  2120.               WHERE cCet.utilisateur = ui.utilisateur
  2121.               AND cCet.dateDebut >= :dateDebut AND cCet.dateDebut <= :dateFin
  2122.               AND ctGivenCet.code = :cet
  2123.               AND cCet.workflow IN( :workflow )
  2124.               ) as givenCet
  2125.          ')
  2126.             ->addSelect('
  2127.             (SELECT sum(demandeReport.nbJour)
  2128.             FROM App\Entity\DemandeReport demandeReport
  2129.             WHERE demandeReport.utilisateur = ui.utilisateur
  2130.             AND demandeReport.annee = :year
  2131.             AND demandeReport.workflow IN( :workflow )
  2132.             ) as givenRAANextYear
  2133.         ')
  2134.             // fin CET
  2135.             ->innerJoin('ui.idPoste''p')
  2136.             ->innerJoin('ui.idAffectation''ra')
  2137.             ->andWhere('ui.utilisateur = :user');
  2138.         $query
  2139.             ->setParameter('rtt''RTT')
  2140.             ->setParameter('RAA''RAA')
  2141.             ->setParameter('can''CAN')
  2142.             ->setParameter('cex''CEX')
  2143.             ->setParameter('cet''CET')
  2144.             ->setParameter('year'$year)
  2145.             ->setParameter('workflow', [Workflow::CO_ACCEPTEDWorkflow::CO_SIGNWorkflow::RE_SIGN], \Doctrine\DBAL\Connection::PARAM_STR_ARRAY)
  2146.             ->setParameter('dateDebut'$dateDebut)
  2147.             ->setParameter('dateFin'$dateFin)
  2148.             ->setParameter('lastYearDateDebut'$lastYearDateDebut)
  2149.             ->setParameter('lastYearDateFin'$lastYearDateFin)
  2150.             ->setParameter('lastYear'$lastYear)
  2151.             ->setParameter('archive'$archive);
  2152.         $query->setParameter('user'$user);
  2153.         $result $query->getQuery()->getOneOrNullResult();
  2154.         $result['calendrier_year'] = $calendrier_year;
  2155.         return $result;
  2156.     }
  2157.     public function filtreExport($results)
  2158.     {
  2159.         $i 0;
  2160.         $idlm = -1;
  2161.         $idUtilisateur = -1;
  2162.         $export = [];
  2163.         foreach ($results as $key => $result) {
  2164.             if ($result['idUtilisateur'] != $idUtilisateur) {
  2165.                 if ($idlm != $result['idlm']) {
  2166.                     $export[$i] = $result;
  2167.                     $idlm $result['idlm'];
  2168.                     $i++;
  2169.                 }
  2170.                 $idlm = -1;
  2171.             }
  2172.             $idUtilisateur $result['idUtilisateur'];
  2173.         }
  2174.         return $export;
  2175.     }
  2176.     function updateUserFop($idUtilisateur$newFop)
  2177.     {
  2178.         $query $this->createQueryBuilder('fop')
  2179.             ->update('App\Entity\UtilisateurInformation''fop')
  2180.             ->set('fop.idFop'':idFop')
  2181.             ->setParameter(':idFop'$newFop)
  2182.             ->setParameter(':idUtilisateur'$idUtilisateur)
  2183.             ->where('fop.idUtilisateur = :idUtilisateur');
  2184.         $query->getQuery()->execute();
  2185.     }
  2186.     function updateUserFoprinci($idUtilisateur$newFoprinci)
  2187.     {
  2188.         $query $this->createQueryBuilder('fop')
  2189.             ->update('App\Entity\UtilisateurInformation''fop')
  2190.             ->set('fop.idFoprinci'':idFoprinci')
  2191.             ->setParameter(':idFoprinci'$newFoprinci)
  2192.             ->setParameter(':idUtilisateur'$idUtilisateur)
  2193.             ->where('fop.idUtilisateur = :idUtilisateur');
  2194.         $query->getQuery()->execute();
  2195.     }
  2196.     public function findDrSuperieur($affectation)
  2197.     {
  2198.         $tableSup = array();
  2199.         $query $this->createQueryBuilder('ui')
  2200.             ->innerJoin('ui.utilisateur''u')
  2201.             ->leftJoin('ui.scan''s')
  2202.             ->where('u.idRole IN (11)')
  2203.             ->andWhere('ui.idAffectation = :affectation')
  2204.             ->andWhere('ui.utilisateurActif=true')
  2205.             ->andWhere('ui.idAffectation NOT IN (:excludeAffectations)')
  2206.             ->setParameter(':affectation'$affectation)
  2207.             ->setParameter('excludeAffectations',  [191812242526]);
  2208.         $query->select('u.idUtilisateur');
  2209.         $query->addOrderBy('CASE WHEN s.id IS NULL THEN 1 ELSE 0 END''ASC');
  2210.         $res $query->getQuery()->getResult();
  2211.         
  2212.         foreach ($res as $id) {
  2213.             $tableSup[] = $id['idUtilisateur'];
  2214.         } 
  2215.         return $res[0]['idUtilisateur'];
  2216.     }
  2217.     public function findDsSuperieur($affectation)
  2218.     {
  2219.         $tableSup = array();
  2220.         $query $this->createQueryBuilder('ui')
  2221.             ->innerJoin('ui.utilisateur''u')
  2222.             ->leftJoin('ui.scan''s')
  2223.             ->where('u.idRole=10')
  2224.             ->andWhere('ui.idAffectation = :affectation')
  2225.             ->andWhere('u.flSuperieurHierarchique=true')
  2226.             ->andWhere('ui.utilisateurActif=true')
  2227.             ->andWhere('ui.idAffectation NOT IN (:excludeAffectations)')
  2228.             ->setParameter(':affectation'$affectation)
  2229.             ->setParameter('excludeAffectations', [191812242526]);
  2230.         $query->select('u.idUtilisateur,u.flSuperieurHierarchique');
  2231.         $query->addOrderBy('CASE WHEN s.id IS NULL THEN 1 ELSE 0 END''ASC');
  2232.         $res $query->getQuery()->getResult();        
  2233.         return $res[0]['idUtilisateur'];
  2234.     }
  2235.     private static function getSessionsAll()
  2236.     {
  2237.         return "SELECT ui.id_utilisateur, ui.civilite, ui.nom, ui.prenom, ui.adresse, ra.id_affectation, ui.id_affectation as affectation_id,
  2238.                     ra.libelle_affectation, rf.id_federation, r_f.r_ser_libl,
  2239.                     rp.libelle_poste, u.id_role
  2240.                 FROM utilisateur_information ui 
  2241.                 INNER JOIN ref_affectation ra ON ui.id_affectation = ra.id_affectation
  2242.                 INNER JOIN ref_federation rf ON ui.id_federation = rf.id_federation
  2243.                 INNER JOIN r_federation r_f ON rf.r_adm_diside = r_f.r_adm_diside
  2244.                 INNER JOIN ref_poste rp ON rp.id_poste = ui.id_poste 
  2245.                 INNER JOIN utilisateur u ON ui.id_utilisateur = u.id_utilisateur";
  2246.     }
  2247.     private function executeGetSessionsQuery($query$params)
  2248.     {
  2249.         $em $this->getEntityManager();
  2250.         $connection $em->getConnection();
  2251.         $statement $connection->prepare($query);
  2252.         $resultSet $statement->executeQuery($params);
  2253.         return $resultSet->fetchAllAssociative();
  2254.     }
  2255.     public function getUserInfoDTN($idFederation$idPoste)
  2256.     {
  2257.         $query self::getSessionsAll() . " WHERE rf.id_federation = :federation AND ui.id_poste = :poste AND ui.utilisateur_actif=true  AND ra.id_affectation NOT IN(24,25,26) ORDER BY u.id_utilisateur DESC";
  2258.         $params = [
  2259.             'federation' => $idFederation,
  2260.             'poste' => $idPoste,
  2261.         ];
  2262.         return self::executeGetSessionsQuery($query$params);
  2263.     }
  2264.     public function postInfosUtilisateur(UtilisateurInformation $entity)
  2265.     {
  2266.         $manager $this->getEntityManager();
  2267.         if ($entity instanceof UtilisateurInformation) {
  2268.             $name $entity->getNom();
  2269.             $name $this->cleanString($name);
  2270.             $login strtoupper((string) $name);
  2271.             $firtString $entity->getPrenom();
  2272.             $firtString strtoupper((string) $this->cleanString($firtString[0]));
  2273.             $loginExist $manager->getRepository(UtilisateurInformation::class)->findBy(
  2274.                 ['login' => $login $firtString]
  2275.             );
  2276.             $nb is_countable($loginExist) ? count($loginExist) : 0;
  2277.             if ($nb 0) {
  2278.                 $loginLike $manager->getRepository(UtilisateurInformation::class)->getLoginLike($login $firtString);
  2279.                 $nbLike is_countable($loginLike) ? count($loginLike) : 0;
  2280.                 $entity->setLogin($login $firtString $nbLike);
  2281.             } else {
  2282.                 $entity->setLogin($login $firtString);
  2283.             }
  2284.             $newPasswordUser $entity->getDateDeNaissance()->format('dmY');
  2285.             $entity->setPassword(hash('sha256'$newPasswordUser));
  2286.             $manager->flush();
  2287.         }
  2288.     }
  2289.     function cleanString($text)
  2290.     {
  2291.         $utf8 = [
  2292.             '/[áàâãªä]/u' => 'a',
  2293.             '/[ÁÀÂÃÄ]/u' => 'A',
  2294.             '/[ÍÌÎÏ]/u' => 'I',
  2295.             '/[íìîï]/u' => 'i',
  2296.             '/[éèêë]/u' => 'e',
  2297.             '/[ÉÈÊË]/u' => 'E',
  2298.             '/[óòôõºö]/u' => 'o',
  2299.             '/[ÓÒÔÕÖ]/u' => 'O',
  2300.             '/[úùûü]/u' => 'u',
  2301.             '/[ÚÙÛÜ]/u' => 'U',
  2302.             '/ç/' => 'c',
  2303.             '/Ç/' => 'C',
  2304.             '/ñ/' => 'n',
  2305.             '/Ñ/' => 'N',
  2306.             '/–/u' => '',
  2307.             // UTF-8 hyphen to "normal" hyphen
  2308.             '/[’‘‹›‚]/u' => '',
  2309.             // Literally a single quote
  2310.             '/[“”«»„]/u' => '',
  2311.             // Double quote
  2312.             '/ /' => '',
  2313.         ];
  2314.         return preg_replace(array_keys($utf8), array_values($utf8), (string) $text);
  2315.     }
  2316.     public function updateScanSignature($idUtilisateur$idScan)
  2317.     {
  2318.         $conn $this->getEntityManager()->getConnection();
  2319.         $sql "UPDATE utilisateur_information SET id_scan = :idScan WHERE id_utilisateur = :idUtilisateur";
  2320.         $stmt $conn->prepare($sql);
  2321.         $stmt->bindValue('idScan'$idScan);
  2322.         $stmt->bindValue('idUtilisateur'$idUtilisateur);
  2323.         $resultSet $stmt->executeQuery();
  2324.     }
  2325.     public  function anneeMax($dates)
  2326.     {
  2327.         $maxYear null;
  2328.         foreach ((array) $dates as $date) {
  2329.             $year intval(substr($date04));
  2330.             if ($maxYear === null || $year $maxYear) {
  2331.                 $maxYear $year;
  2332.             }
  2333.         }
  2334.         return $maxYear;
  2335.     }
  2336. }