<?php
namespace App\Repository;
use App\Entity\CongeDroitAnnuel;
use App\Entity\LettreMission;
use App\Entity\Odm;
use App\Entity\Conge;
use App\Entity\RefAffectation;
use App\Entity\RefFederation;
use App\Entity\RefRole;
use App\Entity\Utilisateur;
use App\Entity\UtilisateurInformation;
use App\Entity\Workflow;
use Doctrine\ORM\EntityRepository;
use Symfony\Bridge\Doctrine\Security\User\UserLoaderInterface;
use App\Entity\RefAffectationCalendrier;
/**
* UtilisateurInformationRepository
*
* This class was generated by the Doctrine ORM. Add your own custom
* repository methods below.
*/
class UtilisateurInformationRepository extends EntityRepository implements UserLoaderInterface
{
function remove_accents($string)
{
if (!preg_match('/[\x80-\xff]/', $string))
return $string;
$chars = [
// Decompositions for Latin-1 Supplement
chr(195) . chr(128) => 'A',
chr(195) . chr(129) => 'A',
chr(195) . chr(130) => 'A',
chr(195) . chr(131) => 'A',
chr(195) . chr(132) => 'A',
chr(195) . chr(133) => 'A',
chr(195) . chr(135) => 'C',
chr(195) . chr(136) => 'E',
chr(195) . chr(137) => 'E',
chr(195) . chr(138) => 'E',
chr(195) . chr(139) => 'E',
chr(195) . chr(140) => 'I',
chr(195) . chr(141) => 'I',
chr(195) . chr(142) => 'I',
chr(195) . chr(143) => 'I',
chr(195) . chr(145) => 'N',
chr(195) . chr(146) => 'O',
chr(195) . chr(147) => 'O',
chr(195) . chr(148) => 'O',
chr(195) . chr(149) => 'O',
chr(195) . chr(150) => 'O',
chr(195) . chr(153) => 'U',
chr(195) . chr(154) => 'U',
chr(195) . chr(155) => 'U',
chr(195) . chr(156) => 'U',
chr(195) . chr(157) => 'Y',
chr(195) . chr(159) => 's',
chr(195) . chr(160) => 'a',
chr(195) . chr(161) => 'a',
chr(195) . chr(162) => 'a',
chr(195) . chr(163) => 'a',
chr(195) . chr(164) => 'a',
chr(195) . chr(165) => 'a',
chr(195) . chr(167) => 'c',
chr(195) . chr(168) => 'e',
chr(195) . chr(169) => 'e',
chr(195) . chr(170) => 'e',
chr(195) . chr(171) => 'e',
chr(195) . chr(172) => 'i',
chr(195) . chr(173) => 'i',
chr(195) . chr(174) => 'i',
chr(195) . chr(175) => 'i',
chr(195) . chr(177) => 'n',
chr(195) . chr(178) => 'o',
chr(195) . chr(179) => 'o',
chr(195) . chr(180) => 'o',
chr(195) . chr(181) => 'o',
chr(195) . chr(182) => 'o',
chr(195) . chr(182) => 'o',
chr(195) . chr(185) => 'u',
chr(195) . chr(186) => 'u',
chr(195) . chr(187) => 'u',
chr(195) . chr(188) => 'u',
chr(195) . chr(189) => 'y',
chr(195) . chr(191) => 'y',
// Decompositions for Latin Extended-A
chr(196) . chr(128) => 'A',
chr(196) . chr(129) => 'a',
chr(196) . chr(130) => 'A',
chr(196) . chr(131) => 'a',
chr(196) . chr(132) => 'A',
chr(196) . chr(133) => 'a',
chr(196) . chr(134) => 'C',
chr(196) . chr(135) => 'c',
chr(196) . chr(136) => 'C',
chr(196) . chr(137) => 'c',
chr(196) . chr(138) => 'C',
chr(196) . chr(139) => 'c',
chr(196) . chr(140) => 'C',
chr(196) . chr(141) => 'c',
chr(196) . chr(142) => 'D',
chr(196) . chr(143) => 'd',
chr(196) . chr(144) => 'D',
chr(196) . chr(145) => 'd',
chr(196) . chr(146) => 'E',
chr(196) . chr(147) => 'e',
chr(196) . chr(148) => 'E',
chr(196) . chr(149) => 'e',
chr(196) . chr(150) => 'E',
chr(196) . chr(151) => 'e',
chr(196) . chr(152) => 'E',
chr(196) . chr(153) => 'e',
chr(196) . chr(154) => 'E',
chr(196) . chr(155) => 'e',
chr(196) . chr(156) => 'G',
chr(196) . chr(157) => 'g',
chr(196) . chr(158) => 'G',
chr(196) . chr(159) => 'g',
chr(196) . chr(160) => 'G',
chr(196) . chr(161) => 'g',
chr(196) . chr(162) => 'G',
chr(196) . chr(163) => 'g',
chr(196) . chr(164) => 'H',
chr(196) . chr(165) => 'h',
chr(196) . chr(166) => 'H',
chr(196) . chr(167) => 'h',
chr(196) . chr(168) => 'I',
chr(196) . chr(169) => 'i',
chr(196) . chr(170) => 'I',
chr(196) . chr(171) => 'i',
chr(196) . chr(172) => 'I',
chr(196) . chr(173) => 'i',
chr(196) . chr(174) => 'I',
chr(196) . chr(175) => 'i',
chr(196) . chr(176) => 'I',
chr(196) . chr(177) => 'i',
chr(196) . chr(178) => 'IJ',
chr(196) . chr(179) => 'ij',
chr(196) . chr(180) => 'J',
chr(196) . chr(181) => 'j',
chr(196) . chr(182) => 'K',
chr(196) . chr(183) => 'k',
chr(196) . chr(184) => 'k',
chr(196) . chr(185) => 'L',
chr(196) . chr(186) => 'l',
chr(196) . chr(187) => 'L',
chr(196) . chr(188) => 'l',
chr(196) . chr(189) => 'L',
chr(196) . chr(190) => 'l',
chr(196) . chr(191) => 'L',
chr(197) . chr(128) => 'l',
chr(197) . chr(129) => 'L',
chr(197) . chr(130) => 'l',
chr(197) . chr(131) => 'N',
chr(197) . chr(132) => 'n',
chr(197) . chr(133) => 'N',
chr(197) . chr(134) => 'n',
chr(197) . chr(135) => 'N',
chr(197) . chr(136) => 'n',
chr(197) . chr(137) => 'N',
chr(197) . chr(138) => 'n',
chr(197) . chr(139) => 'N',
chr(197) . chr(140) => 'O',
chr(197) . chr(141) => 'o',
chr(197) . chr(142) => 'O',
chr(197) . chr(143) => 'o',
chr(197) . chr(144) => 'O',
chr(197) . chr(145) => 'o',
chr(197) . chr(146) => 'OE',
chr(197) . chr(147) => 'oe',
chr(197) . chr(148) => 'R',
chr(197) . chr(149) => 'r',
chr(197) . chr(150) => 'R',
chr(197) . chr(151) => 'r',
chr(197) . chr(152) => 'R',
chr(197) . chr(153) => 'r',
chr(197) . chr(154) => 'S',
chr(197) . chr(155) => 's',
chr(197) . chr(156) => 'S',
chr(197) . chr(157) => 's',
chr(197) . chr(158) => 'S',
chr(197) . chr(159) => 's',
chr(197) . chr(160) => 'S',
chr(197) . chr(161) => 's',
chr(197) . chr(162) => 'T',
chr(197) . chr(163) => 't',
chr(197) . chr(164) => 'T',
chr(197) . chr(165) => 't',
chr(197) . chr(166) => 'T',
chr(197) . chr(167) => 't',
chr(197) . chr(168) => 'U',
chr(197) . chr(169) => 'u',
chr(197) . chr(170) => 'U',
chr(197) . chr(171) => 'u',
chr(197) . chr(172) => 'U',
chr(197) . chr(173) => 'u',
chr(197) . chr(174) => 'U',
chr(197) . chr(175) => 'u',
chr(197) . chr(176) => 'U',
chr(197) . chr(177) => 'u',
chr(197) . chr(178) => 'U',
chr(197) . chr(179) => 'u',
chr(197) . chr(180) => 'W',
chr(197) . chr(181) => 'w',
chr(197) . chr(182) => 'Y',
chr(197) . chr(183) => 'y',
chr(197) . chr(184) => 'Y',
chr(197) . chr(185) => 'Z',
chr(197) . chr(186) => 'z',
chr(197) . chr(187) => 'Z',
chr(197) . chr(188) => 'z',
chr(197) . chr(189) => 'Z',
chr(197) . chr(190) => 'z',
chr(197) . chr(191) => 's',
];
$string = strtr($string, $chars);
return $string;
}
/**
* Requête de base pour récupérer un utilisateur par nom, prénom et mail
* @return \Doctrine\ORM\QueryBuilder
*/
private function baseQueryFindUserByParams(array $requestForm)
{
$nom = $requestForm['nom'];
$prenom = $requestForm['prenom'];
//$mail = $requestForm['courriel'];
$dateDeNaissance = $requestForm['dateDeNaissance'] ?? '';
$dtNaissance = \DateTime::createFromFormat('d/m/Y', $dateDeNaissance);
$query = $this->createQueryBuilder('a')
->leftJoin('a.utilisateur', 'b')
->select("a.nom, a.prenom, b.courriel, a.login, a.idInformationPersonnelle, a.dateDeNaissance")
//->where('b.courriel = :courriel')
->andWhere('a.utilisateurActif = true')
->andWhere('a.dateDeNaissance = :dateDeNaissance')
//->setParameter('courriel', $mail)
->setParameter('dateDeNaissance', $dtNaissance->format('Y-m-d'));
//->setParameter('nom', $nom)
//->setParameter('prenom', $prenom);
return $query;
}
/**
* Récupération de l'identifiant d'un utilisateur selon nom, prénom, login
* @return array
*/
public function retrieveUserLogin(array $requestForm)
{
$query = $this->baseQueryFindUserByParams($requestForm);
$users = $query->getQuery()->getResult();
$nom = str_replace("-", " ", strtoupper((string) $this->remove_accents($requestForm['nom'])));
$prenom = str_replace("-", " ", strtoupper((string) $this->remove_accents($requestForm['prenom'])));
$email = $requestForm['courriel'];
$found = null;
foreach ($users as $user) {
if (
$nom == str_replace("-", " ", strtoupper((string) $this->remove_accents($user['nom'])))
&& $prenom == str_replace("-", " ", strtoupper((string) $this->remove_accents($user['prenom'])))
&& $email == $user['courriel']
) {
$found = $user;
break;
}
}
if (!empty($found) && isset($requestForm['courriel']) && !empty($requestForm['courriel'])) {
return ['error' => 0, 'message' => $found['login']];
} else {
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."];
}
}
/**
* Réinitialisation d'un mot de passe
* @return array
*/
public function findUserReinitialize(array $requestForm)
{
$email = $requestForm['courriel'];
$query = $this->baseQueryFindUserByParams($requestForm);
$users = $query->getQuery()->getResult();
$nom = str_replace("-", " ", strtoupper((string) $this->remove_accents($requestForm['nom'])));
$prenom = str_replace("-", " ", strtoupper((string) $this->remove_accents($requestForm['prenom'])));
$found = null;
foreach ($users as $user) {
if (
$nom == str_replace("-", " ", strtoupper((string) $this->remove_accents($user['nom'])))
&& $prenom == str_replace("-", " ", strtoupper((string) $this->remove_accents($user['prenom'])))
&& $email == $user['courriel']
) {
$found = $user;
break;
}
}
if (!empty($found) && $email != '') {
$user = $found;
$tmpPassword = $this->randomPassword(8);
$tokenUpdatePwd = uniqid(time());
// $utilisateur = $this->_em->find("App\Entity\UtilisateurInformation", $user['idInformationPersonnelle']);
$utilisateur = $this->_em->getRepository(UtilisateurInformation::class)->find($user['idInformationPersonnelle']);
//$utilisateur->getUtilisateur()->setDateConnexion(null);
$utilisateur->setPassword(hash('sha256', $tmpPassword));
$utilisateur->setJetonMdp($tokenUpdatePwd);
$utilisateur->setCourrielMdp($email);
$this->_em->flush();
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')]];
} else {
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."];
}
}
public function findFirstConnection($idUtilisateur)
{
$query = $this->createQueryBuilder('a')
->leftJoin('a.utilisateur', 'b');
$query->select("b.dateConnexion")
->where('a.idUtilisateur = :idUtilisateur')
->setParameter('idUtilisateur', $idUtilisateur);
if (!empty($query->getQuery()->getResult())) {
return $query->getQuery()->getResult()[0]['dateConnexion'];
}
}
public function changePassword(array $requestForm, $idUtilisateur)
{
$return = [];
$first_password = $requestForm['password']['first'];
//$second_password = $requestForm['password']['second'];
$query = $this->createQueryBuilder('a')
->leftJoin('a.utilisateur', 'b');
$query->select("b.courriel, a.idInformationPersonnelle")
->andWhere('a.idUtilisateur = :idUtilisateur')
->setParameter('idUtilisateur', $idUtilisateur);
if (!empty($query->getQuery()->getResult())) {
$queryResult = $query->getQuery()->getResult()[0];
// $utilisateur = $this->_em->find(
// "App\Entity\UtilisateurInformation",
// $queryResult['idInformationPersonnelle']
// );
$utilisateur = $this->_em->getRepository(UtilisateurInformation::class)->find($queryResult['idInformationPersonnelle']);
$utilisateur->setPassword(hash('sha256', (string) $first_password));
$dateNow = (new \DateTime())->setTimezone(new \DateTimeZone('Europe/Paris'));
$utilisateur->setDateMajMdp($dateNow);
$this->_em->flush();
$return['error'] = 0;
$return['retour'] = "Votre mot de passe a bien été modifié";
} else {
$return['error'] = 1;
$return['retour'] = "Echec d’identification. Veuillez contacter la direction des sports, centre de gestion opérationnelle des CTS";
}
return $return;
}
/**
* Mettre à jour le mot de passe de l'utilisateur
* @return mixed
*/
public function updatePassword(array $requestForm, $tokenPwd)
{
// $tmpPassword = isset($requestForm['tmpPassword']) ? $requestForm['tmpPassword'] : '';
$firstPassword = $requestForm['password']['first'] ?? '';
// $email = isset($requestForm['email']) ? $requestForm['email'] : '';
$query = $this->createQueryBuilder('a')
->select("a.idInformationPersonnelle")
->andWhere('a.utilisateurActif = true')
->andWhere('a.jetonMdp = :jetonMdp')
->setParameter('jetonMdp', $tokenPwd);
if (!empty($query->getQuery()->getResult())) {
$queryResult = $query->getQuery()->getResult()[0];
$utilisateur = $this->_em->getRepository(UtilisateurInformation::class)->find($queryResult['idInformationPersonnelle']);
$utilisateur->setPassword(hash('sha256', (string) $firstPassword));
//Supprimer le jeton et le courriel de récupération
$dateNow = (new \DateTime())->setTimezone(new \DateTimeZone('Europe/Paris'));
$utilisateur->setDateMajMdp($dateNow);
$utilisateur->setJetonMdp(null);
$utilisateur->setCourrielMdp(null);
$this->_em->flush();
return ['error' => 0, 'message' => 'Votre mot de passe a bien été modifié'];
} else {
return ['error' => 1, 'message' => 'Echec d’identification. Veuillez contacter la direction des sports, centre de gestion opérationnelle des CTS'];
}
}
public function updatePasswordWithoutToken($newHashedPassword, $user) {
$user->setPassword($newHashedPassword);
$dateNow = (new \DateTime())->setTimezone(new \DateTimeZone('Europe/Paris'));
$user->setDateMajMdp($dateNow);
$this->_em->flush();
return array('error' => 0, 'message' => 'Votre mot de passe a bien été modifié');
}
public function verifOldPassword(array $requestForm, $user)
{
// $tmpPassword = isset($requestForm['tmpPassword']) ? $requestForm['tmpPassword'] : '';
$firstPassword = $requestForm['oldPassword'] ?? '';
$oldPW= hash('sha256', (string) $firstPassword);
// $email = isset($requestForm['email']) ? $requestForm['email'] : '';
$id_information =$user->getIdInformationPersonnelle();
$query = $this->createQueryBuilder('a')
->select("a.idInformationPersonnelle")
->andWhere('a.utilisateurActif = true')
->andWhere('a.idInformationPersonnelle = :id_information')
->andWhere('a.motDePasse = :password')
->setParameter('password', $oldPW)
->setParameter('id_information', $id_information);
if (!empty($query->getQuery()->getResult())) {
return ['error' => 0];
} else {
return ['error' => 1, 'message' => "L'ancien mot de passe n'est pas correct."];
}
}
/**
* Vérification de la validation du jeton
*
* @param string $jeton
* @return boolean
*/
public function isValidToken($token)
{
$query = $this->createQueryBuilder('a');
$query->select("a.idInformationPersonnelle")
->andWhere('a.jetonMdp = :token')
->setParameter('token', $token);
$user = $query->getQuery()->getOneOrNullResult();
return !is_null($user);
}
public function checkUserPassword($iduser, array $requestForm)
{
$return = [];
$return['error'] = 0;
$oldPW = $requestForm['oldpassword'];
$query = $this->createQueryBuilder('a')
->leftJoin('a.utilisateur', 'b');
$query->select("a.login, a.idInformationPersonnelle")
->where('a.idUtilisateur = :idutilisateur')
->setParameter(':idutilisateur', $iduser)
->andWhere('a.motDePasse = :password')
->setParameter('password', $oldPW);
if (empty($query->getQuery()->getResult())) {
$return['error'] = 1;
$return['retour'] = "L'ancien mot de passe n'est pas correct.";
}
return $return;
}
function findDataForPageProfil($id_user)
{
$query = $this->createQueryBuilder('ui')
->innerJoin('ui.utilisateur', 'u')
->innerJoin('u.role', 'r')
->leftJoin('App\Entity\LettreMission', 'lm', 'WITH', 'lm.idUtilisateur = ui.idUtilisateur AND lm.signataire IS NOT NULL')
->leftJoin('lm.idFop', 'fop')
->leftJoin('ui.idFop', 'fopComp')
->leftJoin('ui.idFoprinci', 'foprinci')
->leftJoin('ui.idOdmCadreGeneral', 'cg')
->leftJoin('ui.idLieu', 'lieu')
->leftJoin('ui.idFederation', 'reff')
->leftJoin('App\Entity\RFederation', 'rf', 'WITH', 'rf.rAdmDiside = reff.rAdmDiside')
->leftJoin('ui.idAffectation', 'aff')
->leftJoin('ui.idPoste', 'pos')
->leftJoin('ui.scan', 'sc');
$query->select('ui.idUtilisateur, ui.civilite,u.idRole id_profil,ui.nom, ui.prenom, ui.dateDeNaissance, u.courriel, u.telephoneBureau, '
. 'u.telephonePortable, ui.adresse, ui.login, u.pCivMatcle, pos.idPoste , pos.libellePoste, ui.fonction, ui.grade, ui.indiceMajore, ui.dateFinDroits, '
. 'fopComp.libelleFop as libelleFopComp, fop.libelleFop as libelleFop, foprinci.libelleFop as libelleFopUi, '
. 'aff.libelleAffectation, aff.libelleLong AS affectationLong, rf.rSerLibl, aff.idAffectation, ui.token, cg.idOdmCadreGeneral, cg.libelleOdmCadreGeneral,'
. 'reff.idFederation, reff.saisonSportiveFederation, r.libelleRole,ui.grade,ui.indiceMajore, reff.droitRefFederation,'
. 'sc.path as path_scan, sc.id as id_scan, lieu.idLieu,lm.dateFin,lm.dateDeSignature')
->where('ui.idUtilisateur = :id_user')
->setParameter(':id_user', $id_user)
->orderBy('lm.dateDeSignature', 'DESC');
$res = $query->getQuery()->getResult();
$res[0]['dateDeNaissance'] = $res[0]['dateDeNaissance']->format('d/m/Y');
$res[0]['dateFinDroits'] = $res[0]['dateFinDroits'] ? $res[0]['dateFinDroits']->format('d/m/Y') : '';
$res[0]['libelleFop'] = ((isset($res[0]['libelleFop'])) && (null != $res[0]['libelleFop'])) ? $res[0]['libelleFop'] : $res[0]['libelleFopUi'];
// $res[0]['libelleFop'] = (null != $res[0]['fop.libelleFop'])?$res[0]['fop.libelleFop']:$res[0]['libellePoste'];
// $res[0]['libelleFop'] = ((isset($res[0]['fop.libelleFop']))&&(null != $res[0]['fop.libelleFop']))?$res[0]['fop.libelleFop']:$res[0]['libelleFopUi'];
return $res[0];
}
public function addTentative($login)
{
$query = $this->createQueryBuilder('a');
$query->select("a.tentative, a.idInformationPersonnelle")
->where('a.login = :login')
->setParameter(':login', $login);
if (!empty($query->getQuery()->getResult())) {
$queryResult = $query->getQuery()->getResult()[0];
$tentative = $queryResult['tentative'];
// $utilisateur = $this->_em->find(
// "App\Entity\UtilisateurInformation",
// $queryResult['idInformationPersonnelle']
// );
$utilisateur = $this->_em->getRepository(UtilisateurInformation::class)->find($queryResult['idInformationPersonnelle']);
if ($tentative >= 2) {
$utilisateur->setTentative(0);
$dateBlocage = new \DateTime();
$dateBlocage->add(new \DateInterval("PT30M"));
$utilisateur->setDateBlocage($dateBlocage);
} else {
$tentative++;
$utilisateur->setTentative($tentative);
}
$this->_em->flush();
}
return;
}
public function getCtsInformationGeneralList($filtre = [])
{
$repositoryLM = $this->getEntityManager()->getRepository(LettreMission::class);
$idLettresEtUser = $repositoryLM->findDernieresLettreMissionActivesParUtilisateur();
$lettresIn = [];
foreach ($idLettresEtUser as $n => $l)
$lettresIn[$n] = $l['idLm'];
$query = $this->createQueryBuilder('ui')
->leftJoin('ui.utilisateur', 'u')
->leftJoin('ui.idPoste', 'rp')
->leftJoin('ui.idAffectation', 'ra')
->leftJoin('ui.idFederation', 'rf')
->leftJoin('App\Entity\RFederation', 'f', 'WITH', 'rf.rAdmDiside = f.rAdmDiside')
->leftJoin(
'App\Entity\LettreMission',
'lm',
'WITH',
'u.idUtilisateur = lm.idUtilisateur '
. 'AND lm.idLm IN (:liste_lm)'
)
->setParameter(':liste_lm', $lettresIn);
$query->select('DISTINCT ui.civilite, ui.nom, ui.prenom, u.pCivMatcle, rp.libellePoste, '
. 'ra.libelleLong, rf.rAdmDiside, f.rSerLibc, f.rSerLibl, ra.rSerIdent, '
. 'ui.idUtilisateur, u.courriel, u.droitLmUtilisateur, rf.idFederation, '
. 'ra.idAffectation, u.idRole');
switch ($filtre['role']) {
case RefRole::ROLE_DS_ADMIN:
case RefRole::ROLE_DS_INVITE:
case RefRole::ROLE_DS_SIGNATAIRE:
case RefRole::ROLE_LECTEUR:
if (!isset($filtre['AC']) || !$filtre['AC'])
$query->where('u.idRole = :roleCts')
->setParameter(':roleCts', RefRole::ROLE_CTS);
break;
case RefRole::ROLE_DR:
case RefRole::ROLE_DR_SIGNATAIRE:
$query->where('ui.idAffectation = :affectation')
->andWhere('u.idRole = :roleCts')
->setParameter(':affectation', $filtre['affectation'])
->setParameter(':roleCts', RefRole::ROLE_CTS);
break;
case RefRole::ROLE_FEDE:
case RefRole::ROLE_FEDE_INVITE:
$query->where('ui.idFederation = :federation')
->andWhere('u.idRole = :roleCts')
->setParameter(':federation', $filtre['federation'])
->setParameter(':roleCts', RefRole::ROLE_CTS);
break;
default:
return null;
}
$query->orderBy('ui.nom, ui.prenom', 'DESC');
return $query->getQuery()->getResult();
}
public function findInformationsCreationOdm($idCTS)
{
$query = $this->createQueryBuilder('ui')
->leftJoin('ui.idAffectation', 'ra')
->leftJoin('App\Entity\RefGabarit', 'rg', 'WITH', 'ra.idAffectation = rg.idAffectation')
->innerJoin('ui.idFederation', 'rf')
->innerJoin('App\Entity\RFederation', 'r_f', 'WITH', 'rf.rAdmDiside = r_f.rAdmDiside');
$query->select('ui.grade, ui.indiceMajore, rg.direction, rg.adresse, rg.email, r_f.rSerLibl')
->where('ui.idUtilisateur = :idutilisateur')
->setParameter(':idutilisateur', $idCTS);
return $query->getQuery()->getResult();
}
/**
* @desc Récupère la liste des CTS
*
* @author Sébastien MAILHES
* @param
* @return array
*
* @version 1.0
*/
public function getCtsInformationOmList($filtre = [])
{
$perimetre = $filtre['perimetre'];
$droits = $filtre['droits'];
$repositoryU = $this->getEntityManager()->getRepository(Utilisateur::class);
$repositoryO = $this->getEntityManager()->getRepository(Odm::class);
$filtre['pCivMatcle'] = $repositoryU->findMatcleUtilisateursWithOm($filtre);
$listeUtilisateurOm = $this->getUtilisateurInformationOm($filtre);
$postes = [];
if (true === is_array($listeUtilisateurOm)) {
foreach ($listeUtilisateurOm as $user) {
// Correction demande 24507 SGR Debut
if (isset($postes[$user['matriculeAgent']]) === false) {
// Correction demande 24507 SGR Fin
$postes[$user['matriculeAgent']] = $user['libellePoste'];
}
}
}
// Supression des OM en fonction du périmetre et des droits
if (true === is_array($listeUtilisateurOm)) {
foreach ($listeUtilisateurOm as $key => $odm) {
if (true === isset($postes[$odm['matriculeAgent']])) {
$signatory = $repositoryO->getSignatory($odm['idOdm'], $postes[$odm['matriculeAgent']]); // AEL : p_civ_matcle vient de la base cts-web
if (
($perimetre == 1 && $signatory['signataire'] != 'DS') || ($perimetre == 2 && $signatory['signataire'] != 'DRJSCS') || ($perimetre == 1 || $perimetre == 2) && ($odm['etape'] == 1 || ($odm['etape'] == 3 && false === isset($droits['signatureYes'])))
) {
unset($listeUtilisateurOm[$key]);
}
}
}
}
//préparation des dates
$today = time();
$todayPlus4 = $today + 345600; // 24 * 60 * 60 * 4;
$todayPlus15 = $today + 1_296_000; // 24 * 60 * 60 * 15;
/**
* Tableau de données de sortie
* @var array $listeUtilisateurOm
* [utilisateurId]
* [data sur l'utilisateur]
* ['om-critique'][idom][datasurl'om]
* ['om-urgent'][idom][datasurl'om]
* ['om-non-critique'][idom][datasurl'om]
*/
foreach ($listeUtilisateurOm as $key => $utilisateur) {
$listeUtilisateurOm[$key]['omNonCritique'] = false;
$listeUtilisateurOm[$key]['omUrgent'] = false;
$listeUtilisateurOm[$key]['omCritique'] = false;
$dateDepart = $utilisateur['dateDeDepart'];
if ($dateDepart->getTimestamp() >= $todayPlus15)
$listeUtilisateurOm[$key]['omNonCritique'] = true;
elseif ($dateDepart->getTimestamp() >= $todayPlus4)
$listeUtilisateurOm[$key]['omUrgent'] = true;
else
$listeUtilisateurOm[$key]['omCritique'] = true;
$listeUtilisateurOm[$key]['dateDeDepart'] = $utilisateur['dateDeDepart']->format('Y-m-d');
$listeUtilisateurOm[$key]['dateDeRetour'] = $utilisateur['dateDeRetour']->format('Y-m-d');
$listeUtilisateurOm[$key]['dateDeNaissance'] = $utilisateur['dateDeNaissance']->format('Y-m-d');
}
return $listeUtilisateurOm;
}
public function getUtilisateurInformationOm($filtre = [])
{
$query = $this->createQueryBuilder('ui')
->innerJoin('ui.utilisateur', 'u')
->innerJoin('ui.idPoste', 'rp')
->innerJoin('ui.idFederation', 'rf')
->innerJoin('App\Entity\RFederation', 'r_f', 'WITH', 'rf.rAdmDiside = r_f.rAdmDiside')
->innerJoin('ui.idAffectation', 'ra')
->innerJoin('App\Entity\Evenement', 'e', 'WITH', 'ui.idUtilisateur = e.idUtilisateur')
->innerJoin('App\Entity\Odm', 'o', 'WITH', 'o.idOdm = e.odm')
->innerJoin(
'App\Entity\Workflow',
'w',
'WITH',
'w.idWorkflow = o.workflow AND w.idWorkflow <= 11 '
. 'AND w.idWorkflow NOT IN (' . (true === isset($filtre['tous']) && true === $filtre['tous'] ? '9,13' : '12,13') . ')'
. 'AND w.idWorkflow ' . (true === isset($filtre['signature']) && true === $filtre['signature'] ? '' : '!') . '= 11'
)
->setParameter(':current_date', date('Y-m-d'))
->leftJoin(
'App\Entity\LettreMission',
'lm',
'WITH',
'lm.idUtilisateur = u.idUtilisateur AND lm.dateDebut <= :current_date AND ' .
'lm.dateFin >= :current_date'
)
->leftJoin('lm.idFop', 'fp');
$query->select('u.idUtilisateur, ui.civilite, ui.nom, ui.prenom, rf.rAdmDiside AS libelleCourtFederation, '
. 'r_f.rSerLibl AS libelleCourtDiscipline, r_f.rSerLibc, r_f.rAdmDiside, ra.libelleAffectation, ra.rSerIdent AS affectation, '
. 'rp.libellePoste, u.pCivMatcle AS matriculeAgent, ui.dateDeNaissance, u.courriel, '
. 'ra.libelleLong, fp.idFop, fp.libelleFop, '
. 'o.idOdm, o.destination, o.avisDtn, o.dateDeDepart, o.dateDeRetour, e.idPays, w.idWorkflow, w.libelleAction')
->distinct();
if ($filtre['tous'] === true) {
$oneMonth = new \DateTime();
$oneMonth->sub(new \DateInterval('P90D'));
$twoMonths = new \DateTime();
$twoMonths->add(new \DateInterval('P2M'));
$query->where('o.dateDeRetour BETWEEN :first_current_year AND :last_current_year');
$query->setParameter(':first_current_year', $oneMonth->format('Y-m-d'))
->setParameter(':last_current_year', $twoMonths->format('Y-m-d'));
//$query->setParameter(':first_current_year', date('Y-01-01'))->setParameter(':last_current_year', date('Y-12-31'));
} else {
$query->where(
$query->expr()->orX(
$query->expr()->gte('o.dateDeRetour', ':current_date'),
$query->expr()->isNull('o.dateDeRetour')
)
);
}
switch ($filtre['role']) {
case 1:
$query->andWhere('1=1');
case 3:
case 4:
case 10:
case 11:
$query->andWhere('ui.idAffectation = :affectation')
->setParameter(':affectation', $filtre['affectation']);
break;
case 5:
case 8:
$query->andWhere('ui.idFederation = :federation')
->setParameter(':federation', $filtre['federation']);
break;
default:
$query->andWhere('0=1');
}
if (false === isset($filtre['filtreMJS']));
else {
$query->andWhere('ra.rSerIdent = :filtreMJS')
->setParameter(':filtreMJS', $filtre['filtreMJS']); // MFA : #27374 utiliser le id de la table salzy3c. zy3b.idou00 => zy3c.idou00
}
if (true == isset($filtre['pCivMatcle']) && is_array($filtre['pCivMatcle'])) {
if (count($filtre['pCivMatcle']) == 0)
return [];
$inClause = '';
foreach ($filtre['pCivMatcle'] as $value)
$inClause .= '\'' . $value . '\',';
$inClause = substr($inClause, 0, -1);
$query->andWhere('u.pCivMatcle IN (' . $inClause . ')');
}
$query->orderBy('o.dateDeDepart, ui.nom, ui.prenom');
/* if( true === isset( $filtre['filtreGestionCTS'] ) && true === is_array( $filtre['filtreGestionCTS'] ) )
{
$fNom = false;
$fPrenom = false;
if( false === empty( $filtre['filtreGestionCTS']['nom'] ) )
$fNom = $this -> _stripUnwantedChar( $filtre['filtreGestionCTS']['nom'] );
if( false === empty( $filtre['filtreGestionCTS']['prenom'] ) )
$fPrenom = $this -> _stripUnwantedChar( $filtre['filtreGestionCTS']['prenom'] );
if( true === is_array( $res ) && ( $fNom !== false || $fPrenom !== false ) )
{
foreach( $res as $cle => $user )
{
$uNom = $this -> _stripUnwantedChar( $user['nomuse'] );
$uPrenom = $this -> _stripUnwantedChar( $user['prenom'] );
if( ( $fNom !== false && false === stripos( $uNom, $fNom ) ) ||
( $fPrenom !== false && false === stripos( $uPrenom, $fPrenom ) ) )
unset( $res[ $cle ] );
}
}
} */
return $query->getQuery()->getResult();
}
function findMesCtsId($idUser)
{
$query = $this->createQueryBuilder('ui')
->innerJoin('ui.idAffectation', 'ra')
->select('ra.idAffectation')
->where('ui.idUtilisateur = :idutilisateur')
->setParameter(':idutilisateur', $idUser);
$affectation = $query->getQuery()->getResult()[0]['idAffectation'];
$query = $this->createQueryBuilder('ui')
->innerJoin('ui.utilisateur', 'u')
->select('ui.idUtilisateur, ui.civilite, ui.nom, ui.prenom, ')
->where('u.idRole = 2')
->andWhere('ui.idAffectation = :idaffectation')
->setParameter(':idaffectation', $affectation);
return $query->getQuery()->getResult();
}
function getUserInfoByLogin($login)
{
$currentDay = new \DateTime('now');
$query = $this->createQueryBuilder('ui')
->select('ui.dateBlocage, ui.dateFinDroits, ui.utilisateurActif')
->where('ui.login = :login')
->setParameter(':login', $login);
return $query->getQuery()->getOneOrNullResult();
}
function findMyFede($idFederation)
{
$query = $this->createQueryBuilder('ui')
->innerJoin('ui.idFederation', 'federation')
->innerJoin('ui.idPoste', 'poste')
->where('federation.idFederation = :idFederation')
->andWhere('poste.idPoste = 3')
->setParameter('idFederation', $idFederation)
->setMaxResults(1)
->getQuery()->getOneOrNullResult();
return $query;
}
function findMyCts($idCts, $user)
{
$dtn = [8, 5];
$query = $this->createQueryBuilder('ui')
->innerJoin('ui.idFederation', 'federation')
->innerJoin('ui.idAffectation', 'affectation')
->where('ui.idUtilisateur = :idCts');
if (in_array($user->getUtilisateur()->getIdRole(), $dtn) && $user->getIdFederation()) {
$query->setParameter('idFederation', $user->getIdFederation()->getIdFederation());
$query->andWhere('federation.idFederation = :idFederation');
} else {
if ($user->getUtilisateur()->getIdRole() && $user->getIdAffectation()) {
if ($user->getUtilisateur()->getIdRole() == 11 || $user->getUtilisateur()->getIdRole() == 4) {
$query->andWhere('affectation.idAffectation = :idAffectation');
$query->setParameter('idAffectation', $user->getIdAffectation()->getIdAffectation());
}
}
}
$query->setParameter('idCts', $idCts);
return $query->getQuery()->getResult();
}
public function findAllUserForCTSAdmin($idUtilisateur = null, $returnAsArray = true)
{
$query = $this->createQueryBuilder('ui')
->innerJoin('ui.utilisateur', 'u')
->innerJoin('u.role', 'rr')
->leftJoin('ui.idPoste', 'idPoste')
->leftJoin('ui.idFederation', 'federation')
->leftJoin('ui.idAffectation', 'ra')
->leftJoin('App\Entity\RFederation', 'r_f', 'WITH', 'federation.rAdmDiside = r_f.rAdmDiside')
->leftJoin('ui.idOdmCadreGeneral', 'cg')
->leftJoin('ui.idFop', 'fopc')
// ->andWhere('ui.idFop = fopc.idFop')
->leftJoin('ui.idFoprinci', 'foprinci');
if (!$returnAsArray && $idUtilisateur) {
$query->Where('u.idUtilisateur = :idUtilisateur')
->setParameter('idUtilisateur', $idUtilisateur) // Définition du paramètre
// Retourne des objets complets
->select('ui');
} else {
// ->andWhere('ui.idFoprinci = foprinci.idFop')
$query->select('DISTINCT ui.idUtilisateur, ui.dateDeNaissance, ui.civilite,ui.utilisateurActif, ui.nom,ui.dateFinDroits,
u.idRole, u.droitLmUtilisateur, u.pCivMatcle, ui.prenom, r_f.rSerLibl AS libelleCourtDiscipline, r_f.rSerLibc,
ui.grade, ui.indiceMajore, ui.dateFinDroits, ui.adresse, ra.idAffectation, fopc.libelleFop as uiFonctionCompl, foprinci.libelleFop as uiFonctionPrinci,
cg.libelleOdmCadreGeneral as uiCadreGeneral,
r_f.rAdmDiside,idPoste.libellePoste as libellePoste,ra.libelleAffectation as libelleAffectation,
ra.libelleLong as libelleLong, ra.rSerIdent AS affectation,
u.courriel as courriel, u.telephonePortable as telephonePortable, u.telephoneBureau as telephoneBureau,
rr.libelleRole,u.droitLmUtilisateur as droit,
federation.idFederation as idFederation, ra.idAffectation as idAffectation
');
}
$query->orderBy('ui.nom, ui.prenom', 'DESC');
return $query->getQuery()->getResult();
}
public function findAllUserIDForCTSAdmin()
{
$query = $this->createQueryBuilder('ui')
->select('ui.idUtilisateur');
// $query->orderBy('ui.nom, ui.prenom', 'DESC');
return $query->getQuery()->getResult();
}
public function findAllUserForonlyCTSAdmin($user)
{
$idRole = $user->getUtilisateur()->getIdRole();
$affectation = $user->getIdAffectation()->getIdAffectation();
$federation = (null != $user->getIdFederation()) ? $user->getIdFederation()->getIdFederation() : '';
$query = $this->createQueryBuilder('ui')
->innerJoin('ui.utilisateur', 'u')
->leftJoin('u.role', 'rr')
->leftJoin('ui.idPoste', 'idPoste')
->leftJoin('ui.idFederation', 'federation')
->leftJoin('ui.idAffectation', 'ra')
->leftJoin('App\Entity\RFederation', 'r_f', 'WITH', 'federation.rAdmDiside = r_f.rAdmDiside')
->leftJoin('ui.idOdmCadreGeneral', 'cg')
->leftJoin('ui.idFop', 'fopc')
->leftJoin('App\Entity\LettreMission', 'lm', 'WITH', 'lm.idUtilisateur = ui.idUtilisateur')
->leftJoin('App\Entity\ProjetLettreMission', 'plm', 'WITH', 'lm.idLm = plm.idLm')
->leftJoin('App\Entity\RefAffectation', 'refAff', 'WITH', 'plm.localisation = refAff.idAffectation')
->leftJoin('lm.idFop', 'fop')
->where('u.idRole = 2 or u.idRole = 5')
->andWhere('ui.utilisateurActif = true');
switch ($idRole) {
case 1:
$query->orWhere('ui.utilisateurActif = false');
break;
case 4:
case 11:
$query->andWhere('ui.idAffectation = :aff');
$query->setParameter('aff', $affectation);
break;
case 5:
case 8:
$query->andWhere('ui.idFederation = :fed');
$query->setParameter('fed', $federation);
break;
}
$query->select('DISTINCT ui.idUtilisateur, ui.dateDeNaissance, ui.civilite,ui.utilisateurActif, ui.nom,ui.dateFinDroits,
u.idRole, u.droitLmUtilisateur, u.pCivMatcle, ui.prenom, u.telephoneBureau, u.telephonePortable, r_f.rSerLibl AS libelleCourtDiscipline, r_f.rSerLibc,
ui.grade, ui.indiceMajore, ui.dateFinDroits, ui.adresse, fopc.libelleFop as uiFonctionCompl, fop.libelleFop AS libelleFOP, cg.libelleOdmCadreGeneral as uiCadreGeneral,
r_f.rAdmDiside,idPoste.libellePoste as libellePoste,ra.libelleAffectation as libelleAffectation,
ra.libelleLong as libelleLong,ra.rSerIdent AS affectation,
u.courriel as courriel, rr.libelleRole, u.droitLmUtilisateur as droit,federation.idFederation as idFederation, ra.idAffectation as idAffectation,
plm.adresse_Activite as add, refAff.libelleAffectation as loc, plm.dateDebut as datedebut, plm.dateFin as datefin, lm.idLm as idlm , plm.idProjetLm');
$query->orderBy('ui.nom', 'ASC');
$results = $query->getQuery()->getResult();
return $this->filtreExport($results);
}
public function findAllUserFornonCTSAdmin($user)
{
$idRole = $user->getUtilisateur()->getIdRole();
$affectation = $user->getIdAffectation()->getIdAffectation();
$federation = (null != $user->getIdFederation()) ? $user->getIdFederation()->getIdFederation() : '';
$query = $this->createQueryBuilder('ui')
->innerJoin('ui.utilisateur', 'u')
->innerJoin('u.role', 'rr')
->leftJoin('ui.idPoste', 'idPoste')
->leftJoin('ui.idFederation', 'federation')
->leftJoin('ui.idAffectation', 'ra')
->leftJoin('App\Entity\RFederation', 'r_f', 'WITH', 'federation.rAdmDiside = r_f.rAdmDiside')
->leftJoin('ui.idOdmCadreGeneral', 'cg')
->leftJoin('ui.idFop', 'fopc')
->leftJoin('ui.idFoprinci', 'foprinci')
->leftJoin('App\Entity\LettreMission', 'lm', 'WITH', 'lm.idUtilisateur = ui.idUtilisateur')
->leftJoin('App\Entity\ProjetLettreMission', 'plm', 'WITH', 'lm.idLm = plm.idLm')
->leftJoin('App\Entity\RefAffectation', 'refAff', 'WITH', 'plm.localisation = refAff.idAffectation')
->leftJoin('lm.idFop', 'fop')
->where('u.idRole <> 2 and u.idRole <> 5')
->andWhere('ui.utilisateurActif = true');
switch ($idRole) {
case 1:
$query->orWhere('ui.utilisateurActif = false');
break;
case 4:
case 11:
$query->andWhere('ui.idAffectation = :aff');
$query->setParameter('aff', $affectation);
break;
case 5:
case 8:
$query->andWhere('ui.idFederation = :fed');
$query->setParameter('fed', $federation);
break;
}
$query->select('DISTINCT ui.idUtilisateur, ui.dateDeNaissance, ui.civilite,ui.utilisateurActif, ui.nom,ui.dateFinDroits,
u.idRole, u.droitLmUtilisateur, u.pCivMatcle, ui.prenom, u.telephoneBureau, u.telephonePortable, r_f.rSerLibl AS libelleCourtDiscipline, r_f.rSerLibc,
ui.grade, ui.indiceMajore, ui.dateFinDroits, ui.adresse,
fopc.libelleFop as uiFonctionCompl,
fop.libelleFop AS libelleFOP,
foprinci.libelleFop as uiFonctionPrinci,
cg.libelleOdmCadreGeneral as uiCadreGeneral,
r_f.rAdmDiside,idPoste.libellePoste as libellePoste,ra.libelleAffectation as libelleAffectation,
ra.libelleLong as libelleLong,ra.rSerIdent AS affectation,
u.courriel as courriel, rr.libelleRole, u.droitLmUtilisateur as droit,federation.idFederation as idFederation, ra.idAffectation as idAffectation,
plm.adresse_Activite as add, refAff.libelleAffectation as loc, plm.dateDebut as datedebut, plm.dateFin as datefin, lm.idLm as idlm , plm.idProjetLm');
$query->orderBy('ui.nom, ui.prenom', 'DESC');
$results = $query->getQuery()->getResult();
return $this->filtreExport($results);
}
public function findAllUserForCTSByAffectationAndFederation($idAffectation, $idFederation, $idRole, $idUtilisateur = null, $returnAsArray = true)
{
if (in_array($idRole, [RefRole::ROLE_DS_ADMIN])) {
$query = $this->createQueryBuilder('ui')
->innerJoin('ui.utilisateur', 'u')
->innerJoin('u.role', 'rr')
->leftJoin('ui.idPoste', 'idPoste')
->leftJoin('ui.idFederation', 'federation')
->leftJoin('ui.idAffectation', 'ra')
->leftJoin('App\Entity\RFederation', 'r_f', 'WITH', 'federation.rAdmDiside = r_f.rAdmDiside')
->leftJoin('ui.idOdmCadreGeneral', 'cg')
->leftJoin('ui.idFop', 'fopc')
// ->andWhere('ui.idFop = fopc.idFop')
->leftJoin('ui.idFoprinci', 'foprinci');
// ->andWhere('ui.idFoprinci = foprinci.idFop')
if (!$returnAsArray && $idUtilisateur) {
$query->Where('u.idUtilisateur = :idUtilisateur')
->setParameter('idUtilisateur', $idUtilisateur) // Définition du paramètre
// Retourne des objets complets
->select('ui');
} else {
$query->select('DISTINCT ui.idUtilisateur, ui.dateDeNaissance, ui.civilite,ui.utilisateurActif, ui.nom,ui.dateFinDroits,
u.idRole, u.droitLmUtilisateur, u.pCivMatcle, ui.prenom, r_f.rSerLibl AS libelleCourtDiscipline, r_f.rSerLibc,
ui.grade, ui.indiceMajore, ui.dateFinDroits, ui.adresse, fopc.libelleFop as uiFonctionCompl, foprinci.libelleFop as uiFonctionPrinci, cg.libelleOdmCadreGeneral as uiCadreGeneral,
r_f.rAdmDiside,idPoste.libellePoste as libellePoste,ra.libelleAffectation as libelleAffectation,
ra.libelleLong as libelleLong,ra.rSerIdent AS affectation,
u.courriel as courriel,rr.libelleRole,u.droitLmUtilisateur as droit,federation.idFederation as idFederation, ra.idAffectation as idAffectation');
}
// $query->setParameter('idAffectation', $idAffectation);
} elseif (in_array($idRole, [RefRole::ROLE_DS_SIGNATAIRE, RefRole::ROLE_DS_INVITE, RefRole::ROLE_CTS])) {
$query = $this->createQueryBuilder('ui')
->innerJoin('ui.utilisateur', 'u')
->innerJoin('u.role', 'rr')
->leftJoin('ui.idPoste', 'idPoste')
->leftJoin('ui.idFederation', 'federation')
->leftJoin('ui.idAffectation', 'ra')
->leftJoin('App\Entity\RFederation', 'r_f', 'WITH', 'federation.rAdmDiside = r_f.rAdmDiside')
->leftJoin('ui.idOdmCadreGeneral', 'cg')
->leftJoin('ui.idFop', 'fopc')
// ->andWhere('ui.idFop = fopc.idFop')
->leftJoin('ui.idFoprinci', 'foprinci')
// ->andWhere('ui.idFoprinci = foprinci.idFop')
->andWhere('ui.utilisateurActif = true');
if (!$returnAsArray && $idUtilisateur) {
$query->andWhere('u.idUtilisateur = :idUtilisateur')
->setParameter('idUtilisateur', $idUtilisateur) // Définition du paramètre
// Retourne des objets complets
->select('ui');
} else {
$query->select('DISTINCT ui.idUtilisateur, ui.dateDeNaissance, ui.civilite,ui.utilisateurActif, ui.nom,ui.dateFinDroits,
u.idRole, u.droitLmUtilisateur, u.pCivMatcle, ui.prenom, r_f.rSerLibl AS libelleCourtDiscipline, r_f.rSerLibc,
ui.grade, ui.indiceMajore, ui.dateFinDroits, ui.adresse, fopc.libelleFop as uiFonctionCompl, foprinci.libelleFop as uiFonctionPrinci, cg.libelleOdmCadreGeneral as uiCadreGeneral,
r_f.rAdmDiside,idPoste.libellePoste as libellePoste,ra.libelleAffectation as libelleAffectation,
ra.libelleLong as libelleLong,ra.rSerIdent AS affectation,
u.courriel as courriel,rr.libelleRole,u.droitLmUtilisateur as droit,federation.idFederation as idFederation, ra.idAffectation as idAffectation');
}
// $query->setParameter('idAffectation', $idAffectation);
} elseif (in_array($idRole, [RefRole::ROLE_FEDE, RefRole::ROLE_FEDE_INVITE])) {
$query = $this->createQueryBuilder('ui')
->innerJoin('ui.utilisateur', 'u')
->innerJoin('u.role', 'rr')
->leftJoin('ui.idPoste', 'idPoste')
->leftJoin('ui.idFederation', 'federation')
->andWhere('ui.idFederation = :idFederation')
->leftJoin('ui.idAffectation', 'ra')
->leftJoin('App\Entity\RFederation', 'r_f', 'WITH', 'federation.rAdmDiside = r_f.rAdmDiside')
->leftJoin('ui.idOdmCadreGeneral', 'cg')
->leftJoin('ui.idFop', 'fopc')
// ->andWhere('ui.idFop = fopc.idFop')
->leftJoin('ui.idFoprinci', 'foprinci')
// ->andWhere('ui.idFoprinci = foprinci.idFop')
->andWhere('ui.utilisateurActif = true');
if (!$returnAsArray && $idUtilisateur) {
$query->andWhere('u.idUtilisateur = :idUtilisateur')
->setParameter('idUtilisateur', $idUtilisateur) // Définition du paramètre
// Retourne des objets complets
->select('ui');
} else {
$query->select('DISTINCT ui.idUtilisateur, ui.dateDeNaissance, ui.civilite,ui.utilisateurActif, ui.nom,ui.dateFinDroits,
u.idRole, u.droitLmUtilisateur, u.pCivMatcle, ui.prenom, r_f.rSerLibl AS libelleCourtDiscipline, r_f.rSerLibc,
ui.grade, ui.indiceMajore, ui.dateFinDroits, ui.adresse, fopc.libelleFop as uiFonctionCompl, foprinci.libelleFop as uiFonctionPrinci, cg.libelleOdmCadreGeneral as uiCadreGeneral,
r_f.rAdmDiside,idPoste.libellePoste as libellePoste,ra.libelleAffectation as libelleAffectation,
ra.libelleLong as libelleLong,ra.rSerIdent AS affectation,
u.courriel as courriel,rr.libelleRole,u.droitLmUtilisateur as droit,federation.idFederation as idFederation, ra.idAffectation as idAffectation');
}
$query->setParameter('idFederation', $idFederation);
} else {
if ($idFederation == null) {
$query = $this->createQueryBuilder('ui')
->innerJoin('ui.utilisateur', 'u')
->innerJoin('u.role', 'rr')
->leftJoin('ui.idPoste', 'idPoste')
->leftJoin('ui.idFederation', 'federation')
->leftJoin('ui.idAffectation', 'ra')
->andWhere('ui.idAffectation = :idAffectation')
->leftJoin('App\Entity\RFederation', 'r_f', 'WITH', 'federation.rAdmDiside = r_f.rAdmDiside')
->leftJoin('ui.idOdmCadreGeneral', 'cg')
->leftJoin('ui.idFop', 'fopc')
// ->andWhere('ui.idFop = fopc.idFop')
->leftJoin('ui.idFoprinci', 'foprinci')
// ->andWhere('ui.idFoprinci = foprinci.idFop')
->andWhere('ui.utilisateurActif = true');
if (!$returnAsArray && $idUtilisateur) {
$query->andWhere('u.idUtilisateur = :idUtilisateur')
->setParameter('idUtilisateur', $idUtilisateur) // Définition du paramètre
// Retourne des objets complets
->select('ui');
} else {
$query->select('DISTINCT ui.idUtilisateur, ui.dateDeNaissance, ui.civilite,ui.utilisateurActif, ui.nom,ui.dateFinDroits,
u.idRole, u.droitLmUtilisateur, u.pCivMatcle, ui.prenom, r_f.rSerLibl AS libelleCourtDiscipline, r_f.rSerLibc,
ui.grade, ui.indiceMajore, ui.dateFinDroits, ui.adresse, fopc.libelleFop as uiFonctionCompl, foprinci.libelleFop as uiFonctionPrinci, cg.libelleOdmCadreGeneral as uiCadreGeneral,
r_f.rAdmDiside,idPoste.libellePoste as libellePoste,ra.libelleAffectation as libelleAffectation,
ra.libelleLong as libelleLong,ra.rSerIdent AS affectation,
u.courriel as courriel,rr.libelleRole,u.droitLmUtilisateur as droit,federation.idFederation as idFederation, ra.idAffectation as idAffectation');
}
} else {
$query = $this->createQueryBuilder('ui')
->innerJoin('ui.utilisateur', 'u')
->innerJoin('u.role', 'rr')
->leftJoin('ui.idPoste', 'idPoste')
->leftJoin('ui.idFederation', 'federation')
->leftJoin('ui.idAffectation', 'ra')
->andWhere('ui.idAffectation = :idAffectation')
->andWhere('ui.idFederation = :idFederation')
->leftJoin('App\Entity\RFederation', 'r_f', 'WITH', 'federation.rAdmDiside = r_f.rAdmDiside')
->leftJoin('ui.idOdmCadreGeneral', 'cg')
->leftJoin('ui.idFop', 'fopc')
// ->andWhere('ui.idFop = fopc.idFop')
->leftJoin('ui.idFoprinci', 'foprinci')
// ->andWhere('ui.idFoprinci = foprinci.idFop')
->andWhere('ui.utilisateurActif = true');
if (!$returnAsArray && $idUtilisateur) {
$query->andWhere('u.idUtilisateur = :idUtilisateur')
->setParameter('idUtilisateur', $idUtilisateur) // Définition du paramètre
// Retourne des objets complets
->select('ui');
} else {
$query->select('DISTINCT ui.idUtilisateur, ui.dateDeNaissance, ui.civilite,ui.utilisateurActif, ui.nom,ui.dateFinDroits,
u.idRole, u.droitLmUtilisateur, u.pCivMatcle, ui.prenom, r_f.rSerLibl AS libelleCourtDiscipline, r_f.rSerLibc,
ui.grade, ui.indiceMajore, ui.dateFinDroits, ui.adresse, fopc.libelleFop as uiFonctionCompl, foprinci.libelleFop as uiFonctionPrinci, cg.libelleOdmCadreGeneral as uiCadreGeneral,
r_f.rAdmDiside,idPoste.libellePoste as libellePoste,ra.libelleAffectation as libelleAffectation,
ra.libelleLong as libelleLong,ra.rSerIdent AS affectation,
u.courriel as courriel,rr.libelleRole,u.droitLmUtilisateur as droit,federation.idFederation as idFederation, ra.idAffectation as idAffectation');
}
$query->setParameter('idFederation', $idFederation);
}
$query->setParameter('idAffectation', $idAffectation);
}
$query->orderBy('ui.nom, ui.prenom', 'DESC');
return $query->getQuery()->getResult();
}
function findMyCollab($user)
{
// $today = new \DateTime('now');
// $today = $today->format('Y-m-d');
$query = $this->createQueryBuilder('ui')
->innerJoin('ui.utilisateur', 'u')
->innerJoin('ui.idPoste', 'idPoste')
->innerJoin('ui.idFederation', 'federation')
->innerJoin('ui.idAffectation', 'ra')
->leftJoin('App\Entity\RFederation', 'r_f', 'WITH', 'federation.rAdmDiside = r_f.rAdmDiside')
->leftJoin('ui.idOdmCadreGeneral', 'cg')
->leftJoin('ui.idFop', 'fopc')
->where('ui.idPoste IS NOT NULL')
->andWhere('ui.utilisateurActif = true')
->andWhere('federation.federationActive = true')
// ->setParameter('today', date($today))
// ->andWhere('ui.dateFinDroits >= :today')
->select('DISTINCT u.idUtilisateur, u.telephoneBureau, u.telephonePortable , ui.dateDeNaissance, ui.login, ui.civilite, ui.nom, ui.prenom,
ui.grade, ui.indiceMajore, ui.dateFinDroits, ui.adresse, fopc.libelleFop as uiFonctionCompl, cg.libelleOdmCadreGeneral as uiCadreGeneral,
r_f.rSerLibl AS libelleCourtDiscipline, r_f.rSerLibc,
r_f.rAdmDiside, u.pCivMatcle as pCivMatcle, idPoste.libellePoste as libellePoste,
ra.libelleAffectation as libelleAffectation, ra.libelleLong as libelleLong, ra.rSerIdent AS affectation,
u.courriel as courriel, u.droitLmUtilisateur as droit, federation.idFederation as idFederation, ra.idAffectation as idAffectation, u.idRole as IdRole
')
->addSelect('FIRST(SELECT fop.libelleFop FROM App\Entity\LettreMission lm
INNER JOIN lm.plm plm INNER JOIN lm.idFop fop
WHERE lm.idUtilisateur = u.idUtilisateur AND plm.idWorkflow = 7 ORDER BY lm.idLm DESC) AS libelleFop');
if ($user->getIdFederation()) {
$query->setParameter('idFederation', $user->getIdFederation()->getIdFederation());
$query->andWhere('federation.idFederation = :idFederation');
} else {
$dtn = [RefRole::ROLE_DS_SIGNATAIRE, RefRole::ROLE_DS_INVITE, RefRole::ROLE_DS_ADMIN, RefRole::ROLE_LECTEUR];
if (!in_array($user->getUtilisateur()->getIdRole(), $dtn)) {
$query->setParameter('idAffectation', $user->getIdAffectation()->getIdAffectation());
$query->andWhere('ra.idAffectation = :idAffectation');
}
}
$query->orderBy('ui.nom, ui.prenom', 'DESC');
// dump($today); die();
return $query->getQuery()->getResult();
}
function findAllCollabsForStatistique($date)
{
$query = $this->createQueryBuilder('ui')
->innerJoin('ui.utilisateur', 'u')
->innerJoin('u.role', 'role')
->innerJoin('ui.idPoste', 'idPoste')
->innerJoin('ui.idFederation', 'federation')
->innerJoin('ui.idAffectation', 'ra')
->leftJoin('App\Entity\RFederation', 'r_f', 'WITH', 'federation.rAdmDiside = r_f.rAdmDiside')
->where('ui.idPoste IS NOT NULL')
->andWhere('u.dateCreation <= :date')
->andWhere('ui.utilisateurActif = true')
->andWhere('federation.federationActive = true')
->select('DISTINCT u.idUtilisateur, ui.civilite, ui.nom, ui.prenom,' . 'r_f.rSerLibl, r_f.rSerLibc
, 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
,' . 'u.courriel as courriel, u.droitLmUtilisateur as droit,federation.idFederation as idFederation, ra.idAffectation as idAffectation, role.idRole as IdRole');
$query->setParameter('date', $date);
return $query->getQuery()->getResult();
}
public function findOdmAdemander($firstDate, $lastDate, $idFede)
{
$query = $this->createQueryBuilder('ui')
->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')
->innerJoin('ui.utilisateur', 'utilisateur')
->innerJoin('ui.idFederation', 'federation')
->innerJoin('ui.idAffectation', 'affectation')
->innerJoin('ui.idPoste', 'poste')
->innerJoin('App\Entity\Evenement', 'e', 'WITH', 'e.idUtilisateur = ui.idUtilisateur')
->innerJoin('e.odm', 'odm')
->innerJoin('e.pays', 'pays')
->innerJoin('odm.workflow', 'workflow')
->where('odm.avisDtn IS NULL')
->andWhere('workflow.idWorkflow = 10')
->andWhere('federation.idFederation = :idFede')
->andWhere('odm.dateDeDepart BETWEEN :firstDate AND :lastDate ')
->setParameter('firstDate', $firstDate)
->setParameter('idFede', $idFede)
->setParameter('lastDate', $lastDate);
return $query->getQuery()->getResult();
}
public function findAllDtn()
{
$query = $this->createQueryBuilder('ui')
->select('ui.idUtilisateur,ui.nom As nom,ui.prenom AS prenom ,federation.idFederation AS idFede,utilisateur.courriel AS courriel')
->innerJoin('ui.idFederation', 'federation')
->innerJoin('ui.utilisateur', 'utilisateur')
->innerJoin('utilisateur.role', 'role')
->where('ui.utilisateurActif = true')
->andWhere('federation.federationActive = true')
->andwhere('role.idRole IN (5,8)');
return $query->getQuery()->getResult();
}
function findListeProjetLettreMissionByFede($idFederation)
{
$query = $this->createQueryBuilder('ui')
->where('ui.idFederation = :idFed')
->setParameter('idFed', $idFederation);
return $query->getQuery()->getResult();
}
function findListeProjetLettreMissionByAff($idAffectation)
{
$query = $this->createQueryBuilder('ui')
->where('ui.idAffectation = :idAff')
->setParameter('idAff', $idAffectation);
return $query->getQuery()->getResult();
}
/**
* Requête pour récuperer les CTS actifs
* @param array $filtre
* @return mixed
*
*/
private function queryInfoCts($filtre = [])
{
$query = $this->createQueryBuilder('ui')
->leftJoin('ui.utilisateur', 'u')
->leftJoin('ui.idPoste', 'rp')
->leftJoin('ui.idAffectation', 'ra')
->leftJoin('ui.idFederation', 'rf')
->leftJoin('App\Entity\RFederation', 'f', 'WITH', 'rf.rAdmDiside = f.rAdmDiside');
$query->select('DISTINCT ui.civilite, ui.nom, ui.prenom, u.pCivMatcle, rp.libellePoste, '
. 'ra.libelleLong, rf.rAdmDiside, f.rSerLibc, f.rSerLibl, ra.rSerIdent, '
. 'ui.idUtilisateur, u.courriel, u.droitLmUtilisateur, rf.idFederation, '
. 'ra.idAffectation, u.idRole');
switch ($filtre['role']) {
case RefRole::ROLE_DS_ADMIN:
case RefRole::ROLE_DS_INVITE:
case RefRole::ROLE_DS_SIGNATAIRE:
case RefRole::ROLE_LECTEUR:
$query->where('u.idRole = :role_cts or u.idRole = :role_fede')
->andWhere('ui.utilisateurActif = true')
->andWhere('rf.federationActive = true')
->setParameter('role_cts', RefRole::ROLE_CTS)
->setParameter('role_fede', RefRole::ROLE_FEDE);
break;
case RefRole::ROLE_DR:
case RefRole::ROLE_DR_SIGNATAIRE:
$query->where('ui.idAffectation = :affectation')
->setParameter(':affectation', $filtre['affectation'])
->andWhere('u.idRole = :role_cts or u.idRole = :role_fede')
->andWhere('ui.utilisateurActif = true')
->andWhere('rf.federationActive = true')
->setParameter('role_cts', RefRole::ROLE_CTS)
->setParameter('role_fede', RefRole::ROLE_FEDE);
break;
case RefRole::ROLE_FEDE:
case RefRole::ROLE_FEDE_INVITE:
$query->where('ui.idFederation = :federation')
->setParameter(':federation', $filtre['federation'])
->andWhere('u.idRole = :role_cts or u.idRole = :role_fede')
->setParameter('role_cts', RefRole::ROLE_CTS)
->setParameter('role_fede', RefRole::ROLE_FEDE);
$query->andWhere('ui.utilisateurActif = true')
->andWhere('rf.federationActive = true');
break;
default:
$query->where('0=1');
}
$query->orderBy('ui.nom, ui.prenom', 'DESC');
return $query;
}
public function getInfosCts($filtre = [])
{
$query = $this->queryInfoCts($filtre);
return $query->getQuery()->getResult();
}
public function getInfosCtsWithLM($filtre = [])
{
$query = $this->queryInfoCts($filtre);
$subQuerySignedPlm = 'FIRST(SELECT plm2.idProjetLm FROM App\Entity\ProjetLettreMission plm2 WHERE'
. ' plm2.idWorkflow = ' . Workflow::LM_SIGNEE
. ' AND plm2.idUtilisateur = ui.idUtilisateur ORDER BY plm2.idProjetLm DESC)';
$query->innerJoin('App\Entity\ProjetLettreMission', 'plm', 'WITH', 'plm.idProjetLm = ' . $subQuerySignedPlm)
->leftJoin('plm.idFop', 'fop')
->leftJoin('plm.idLm', 'lm')
->leftJoin('ui.idFop', 'fopComp')
->leftJoin('ui.idOdmCadreGeneral', 'cg')
->addSelect('ui.grade, ui.indiceMajore, ui.dateFinDroits, fopComp.libelleFop as uiFonctionCompl,
cg.libelleOdmCadreGeneral as uiCadreGeneral, plm.idProjetLm, plm.dateDebut, plm.dateFin, lm.idLm, fop.libelleFop');
return $query->getQuery()->getResult();
}
public function findSuperieurAffectation($affectation)
{
$tableSup = [];
$query = $this->createQueryBuilder('ui')
->innerJoin('ui.utilisateur', 'u')
->where('u.idRole IN (4, 11)')
->andWhere('ui.idAffectation = :affectation')
->setParameter(':affectation', $affectation);
$query->select('u.idUtilisateur');
$res = $query->getQuery()->getResult();
foreach ($res as $id) {
$tableSup[] = $id['idUtilisateur'];
}
return $tableSup;
}
public function findSuperieurFederation($federation)
{
$tableSup = [];
$query = $this->createQueryBuilder('ui')
->innerJoin('ui.utilisateur', 'u')
->where('u.idRole IN (5, 8)')
->andWhere('ui.idFederation = :federation')
->setParameter(':federation', $federation);
$query->select('u.idUtilisateur');
$res = $query->getQuery()->getResult();
foreach ($res as $id) {
$tableSup[] = $id['idUtilisateur'];
}
return $tableSup;
}
public function findSuperieurDS()
{
$tableSup = [];
$query = $this->createQueryBuilder('ui')
->innerJoin('ui.utilisateur', 'u')
->where('u.idRole IN (1, 3, 10)');
$query->select('u.idUtilisateur');
$res = $query->getQuery()->getResult();
foreach ($res as $id) {
$tableSup[] = $id['idUtilisateur'];
}
return $tableSup;
}
public function getInfosCtsForStatistiquePerimetre($dateDebut, $dateFin, $idAffectation = null, $idFederation = null, $idPoste = null, $idFop = null)
{
$query = $this->createQueryBuilder('ui')
->select('utilisateur.idUtilisateur AS user , ev.idPerimetre')
->innerJoin('App\Entity\Evenement', 'ev', 'WITH', 'ui.idUtilisateur = ev.idUtilisateur')
->innerJoin('ui.utilisateur', 'utilisateur')
->Where('ev.date BETWEEN :dateDebut AND :dateFin')
->andWhere('ev.finEvenement BETWEEN :dateDebut AND :dateFin')
->andWhere('ev.idPerimetre IS NOT NULL')
->distinct('ui.idUtilisateur')
->setParameter('dateDebut', $dateDebut)
->setParameter('dateFin', $dateFin);
if ($idAffectation) {
$query->innerJoin('ui.idAffectation', 'affectation')
->andWhere('affectation.idAffectation = :idAffectation');
$query->setParameter('idAffectation', $idAffectation);
}
if ($idFederation) {
$query->innerJoin('ui.idFederation', 'federation')
->andWhere('federation.idFederation = :idFederation')
->setParameter('idFederation', $idFederation);
}
if ($idPoste) {
$query->innerJoin('ui.idPoste', 'poste')
->andWhere('poste.idPoste = :idPoste')
->setParameter(':idPoste', $idPoste);
}
if ($idFop) {
$query->innerJoin('App\Entity\ProjetLettreMission', 'plm', 'WITH', 'ui.idUtilisateur = plm.idUtilisateur')
->andWhere('plm.idFop = :idFop')
->andWhere('plm.dateDebut <= :dateDebut')
->andWhere('plm.dateFin >= :dateFin')
->andWhere('plm.idWorkflow = 7')
->setParameter('idFop', $idFop);
}
$query->groupBy('utilisateur.idUtilisateur,ev.idPerimetre ');
return $query->getQuery()->getScalarResult();
}
public function getInfosCtsForStatistiqueAction($dateDebut, $dateFin, $idAffectation = null, $idFederation = null, $idPoste = null, $idFop = null)
{
$query = $this->createQueryBuilder('ui')
->select('utilisateur.idUtilisateur AS user , act.idAction')
->innerJoin('App\Entity\Evenement', 'ev', 'WITH', 'ui.idUtilisateur = ev.idUtilisateur')
->innerJoin('App\Entity\RefAction', 'act', 'WITH', 'ev.idAction = act.idAction')
->innerJoin('ui.utilisateur', 'utilisateur')
->Where('ev.date BETWEEN :dateDebut AND :dateFin')
->andWhere('ev.finEvenement BETWEEN :dateDebut AND :dateFin')
->andWhere('ev.action IS NOT NULL')
->distinct('ui.idUtilisateur')
->setParameter('dateDebut', $dateDebut)
->setParameter('dateFin', $dateFin);
if ($idAffectation) {
$query->innerJoin('ui.idAffectation', 'affectation')
->andWhere('affectation.idAffectation = :idAffectation');
$query->setParameter('idAffectation', $idAffectation);
}
if ($idFederation) {
$query->innerJoin('ui.idFederation', 'federation')
->andWhere('federation.idFederation = :idFederation')
->setParameter('idFederation', $idFederation);
}
if ($idPoste) {
$query->innerJoin('ui.idPoste', 'poste')
->andWhere('poste.idPoste = :idPoste')
->setParameter(':idPoste', $idPoste);
}
if ($idFop) {
$query->innerJoin('App\Entity\ProjetLettreMission', 'plm', 'WITH', 'ui.idUtilisateur = plm.idUtilisateur')
->andWhere('plm.idFop = :idFop')
->andWhere('plm.dateDebut <= :dateDebut')
->andWhere('plm.dateFin >= :dateFin')
->andWhere('plm.idWorkflow = 7')
->setParameter('idFop', $idFop);
}
$query->groupBy('utilisateur.idUtilisateur,act.idAction');
return $query->getQuery()->getScalarResult();
}
public function getInfosCtsForStatistiqueActionPerimetre($dateDebut, $dateFin, $idAffectation = null, $idFederation = null, $idPoste = null, $idFop = null)
{
$query = $this->createQueryBuilder('ui')
->select('utilisateur.idUtilisateur AS user , act.idAction, ev.idPerimetre')
->innerJoin('App\Entity\Evenement', 'ev', 'WITH', 'ui.idUtilisateur = ev.idUtilisateur')
->innerJoin('App\Entity\RefAction', 'act', 'WITH', 'ev.idAction = act.idAction')
->innerJoin('ui.utilisateur', 'utilisateur')
->Where('ev.date BETWEEN :dateDebut AND :dateFin')
->andWhere('ev.finEvenement BETWEEN :dateDebut AND :dateFin')
->andWhere('ev.action IS NOT NULL')
->andWhere('ev.idPerimetre IS NOT NULL')
->distinct('ui.idUtilisateur')
->setParameter('dateDebut', $dateDebut)
->setParameter('dateFin', $dateFin);
if ($idAffectation) {
$query->innerJoin('ui.idAffectation', 'affectation')
->andWhere('affectation.idAffectation = :idAffectation');
$query->setParameter('idAffectation', $idAffectation);
}
if ($idFederation) {
$query->innerJoin('ui.idFederation', 'federation')
->andWhere('federation.idFederation = :idFederation')
->setParameter('idFederation', $idFederation);
}
if ($idPoste) {
$query->innerJoin('ui.idPoste', 'poste')
->andWhere('poste.idPoste = :idPoste')
->setParameter(':idPoste', $idPoste);
}
if ($idFop) {
$query->innerJoin('App\Entity\ProjetLettreMission', 'plm', 'WITH', 'ui.idUtilisateur = plm.idUtilisateur')
->andWhere('plm.idFop = :idFop')
->andWhere('plm.dateDebut <= :dateDebut')
->andWhere('plm.dateFin >= :dateFin')
->andWhere('plm.idWorkflow = 7')
->setParameter('idFop', $idFop);
}
$query->groupBy('utilisateur.idUtilisateur,act.idAction,ev.idPerimetre');
return $query->getQuery()->getScalarResult();
}
public function findActionByMonths($dateDebut, $dateFin, $idAffectation = null, $idFederation = null, $idPoste = null, $idFop = null)
{
$query = $this->createQueryBuilder('ui')
->select('utilisateur.idUtilisateur AS user , act.idAction, ev.idPerimetre,ev.date,ev.finEvenement')
->innerJoin('App\Entity\Evenement', 'ev', 'WITH', 'ui.idUtilisateur = ev.idUtilisateur')
->innerJoin('App\Entity\RefAction', 'act', 'WITH', 'ev.idAction = act.idAction')
->innerJoin('ui.utilisateur', 'utilisateur')
->Where('ev.date BETWEEN :dateDebut AND :dateFin')
->andWhere('ev.finEvenement BETWEEN :dateDebut AND :dateFin')
->andWhere('ev.action IS NOT NULL')
->andWhere('ev.idPerimetre IS NOT NULL')
->distinct('ui.idUtilisateur')
->setParameter('dateDebut', $dateDebut)
->setParameter('dateFin', $dateFin);
if ($idAffectation) {
$query->innerJoin('ui.idAffectation', 'affectation')
->andWhere('affectation.idAffectation = :idAffectation');
$query->setParameter('idAffectation', $idAffectation);
}
if ($idFederation) {
$query->innerJoin('ui.idFederation', 'federation')
->andWhere('federation.idFederation = :idFederation')
->setParameter('idFederation', $idFederation);
}
if ($idPoste) {
$query->innerJoin('ui.idPoste', 'poste')
->andWhere('poste.idPoste = :idPoste')
->setParameter(':idPoste', $idPoste);
}
if ($idFop) {
$query->innerJoin('App\Entity\ProjetLettreMission', 'plm', 'WITH', 'ui.idUtilisateur = plm.idUtilisateur')
->andWhere('plm.idFop = :idFop')
->andWhere('plm.dateDebut <= :dateDebut')
->andWhere('plm.dateFin >= :dateFin')
->andWhere('plm.idWorkflow = 7')
->setParameter('idFop', $idFop);;
}
$query->groupBy('utilisateur.idUtilisateur,act.idAction,ev.idPerimetre,ev.date,ev.finEvenement');
return $query->getQuery()->getScalarResult();
}
public function getInfosCtsForStatistiqueRation($dateDebut, $dateFin, $idAffectation = null, $idFederation = null, $idPoste = null, $idFop = null)
{
$query = $this->createQueryBuilder('ui')
->select('utilisateur.idUtilisateur AS user , act.idAction, ev.idPerimetre,ev.date,ev.heureDebut,ev.heureFin,ev.finEvenement')
->innerJoin('App\Entity\Evenement', 'ev', 'WITH', 'ui.idUtilisateur = ev.idUtilisateur')
->innerJoin('App\Entity\RefAction', 'act', 'WITH', 'ev.idAction = act.idAction')
->innerJoin('ui.utilisateur', 'utilisateur')
->Where('ev.date >= :dateDebut')
->andWhere('ev.finEvenement <= :dateFin')
->andWhere('ev.action IS NOT NULL')
->andWhere('ev.idPerimetre IS NOT NULL')
->distinct('ui.idUtilisateur')
->setParameter('dateDebut', $dateDebut)
->setParameter('dateFin', $dateFin);
if ($idAffectation) {
$query->innerJoin('ui.idAffectation', 'affectation')
->andWhere('affectation.idAffectation = :idAffectation');
$query->setParameter('idAffectation', $idAffectation);
}
if ($idFederation) {
$query->innerJoin('ui.idFederation', 'federation')
->andWhere('federation.idFederation = :idFederation')
->setParameter('idFederation', $idFederation);
}
if ($idPoste) {
$query->innerJoin('ui.idPoste', 'poste')
->andWhere('poste.idPoste = :idPoste')
->setParameter(':idPoste', $idPoste);
}
if ($idFop) {
$query->innerJoin('App\Entity\ProjetLettreMission', 'plm', 'WITH', 'ui.idUtilisateur = plm.idUtilisateur')
->andWhere('plm.idFop = :idFop')
->andWhere('plm.dateDebut <= :dateDebut')
->andWhere('plm.dateFin >= :dateFin')
->andWhere('plm.idWorkflow = 7')
->setParameter('idFop', $idFop);
}
$query->groupBy('utilisateur.idUtilisateur,act.idAction,ev.idPerimetre,ev.date,ev.heureDebut,ev.heureFin,ev.finEvenement');
return $query->getQuery()->getScalarResult();
}
public function getFederationByDr($idAffectation)
{
$em = $this->getEntityManager();
$connection = $em->getConnection();
$statement = $connection->prepare("select distinct(id_federation) from utilisateur_information ui
INNER JOIN utilisateur u ON ui.id_utilisateur = u.id_utilisateur
where id_affectation = " . $idAffectation . " and id_federation IS NOT NULL and id_role IN (5,2)");
$resultSet = $statement->executeQuery();
return $resultSet->fetchAllAssociative();
}
/**
* Requête pour récuperer la liste de fédérations des utilisateurs selon ses affectations
* @param $idAffectation
* @return string
*/
public function queryFederationByDr($idAffectation)
{
$query = "SELECT DISTINCT (ui.id_federation) FROM utilisateur_information ui
INNER JOIN utilisateur u ON ui.id_utilisateur = u.id_utilisateur
WHERE ui.id_affectation = " . $idAffectation . " AND ui.id_federation IS NOT NULL"
. " AND u.id_role IN (" . RefRole::ROLE_FEDE . "," . RefRole::ROLE_CTS . ")";
return $query;
}
public function loadUserByUsername($username)
{
return $this->createQueryBuilder('u')
->where('u.login = :username')
->andWhere('u.utilisateurActif = true')
->setParameter('username', $username)
->getQuery()
->getOneOrNullResult();
}
public function getLoginLike($username)
{
return $this->createQueryBuilder('u')
->where('u.login like :username')
->setParameter('username', $username . '%')
->getQuery()
->getResult();
}
public function isLoginAlreadyExist($current_user, $login)
{
$query = $this->createQueryBuilder('u')
->select('COUNT(u.idInformationPersonnelle) AS nb_user')
->where('u.idInformationPersonnelle != :current_user')
->andWhere('u.login = :login')
->setParameter('current_user', $current_user)
->setParameter('login', $login)
->getQuery();
$result = $query->getArrayResult();
return (!empty($result[0]) && $result[0]['nb_user'] > 0 ? true : false);
}
/**
* Generate random password
*
* @param $length
* @return string
*/
private function randomPassword($length)
{
$symbols = [];
$used_symbols = '';
$symbols["lower_case"] = 'abcdefghijklmnopqrstuvwxyz';
$symbols["upper_case"] = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$symbols["numbers"] = '1234567890';
$symbols["special_symbols"] = '!?@#-_+<>[]{}';
$used_symbols .= $symbols["lower_case"] . $symbols["upper_case"] . $symbols["numbers"] . $symbols["special_symbols"];
$symbols_length = strlen($used_symbols) - 1; //strlen starts from 0 so to get number of characters deduct 1
$n_lc = random_int(0, strlen($symbols["lower_case"]) - 1);
$n_uc = random_int(0, strlen($symbols["upper_case"]) - 1);
$n_num = random_int(0, strlen($symbols["numbers"]) - 1);
$n_ss = random_int(0, strlen($symbols["special_symbols"]) - 1);
$requires = 4;
$rest = $length - $requires;
//Get the requires characters
$pass = $symbols["lower_case"][$n_lc] . $symbols["upper_case"][$n_uc] . $symbols["numbers"][$n_num] . $symbols["special_symbols"][$n_ss];
for ($i = 0; $i < $rest; $i++) {
$n = random_int(0, $symbols_length); // get a random character from the string with all characters
$pass .= $used_symbols[$n]; // add the character to the password string
}
return str_shuffle($pass); // return the generated password
}
/**
* Get manager by an affectation
*/
public function getManagerEmailByAffectation(RefAffectationController $affectation)
{
$emails = [];
$query = $this->createQueryBuilder('ui')
->select('u.courriel')
->innerJoin('ui.utilisateur', 'u')
->where('u.idRole IN (1, 3, 4, 10, 11)')
->andWhere('ui.idAffectation = :affectation')
->andWhere('u.flSuperieurHierarchique = true')
->setParameter(':affectation', $affectation);
$result = $query->getQuery()->getResult();
foreach ($result as $item) {
$emails[] = $item['courriel'];
}
return $emails;
}
/**
* Count user affected to fede
*/
public function getNbUsersByFede($idFederation)
{
$query = $this->createQueryBuilder('ui')
->select('COUNT(ui.idInformationPersonnelle) AS nb_users')
->where('ui.idFederation = :idFederation')
->setParameter('idFederation', $idFederation)
->getQuery();
$result = $query->getResult();
return $result[0]['nb_users'];
}
public function getMyCtsDayOffInformation(
$federation,
$affectation,
int $year,
$archive,
$typeCalendrier
) {
$dateDebutYear = null;
$dateFinYear = null;
$dateDebutLastYear = null;
$archive = ($archive == "1") ? true : false;
// $calendrier_scolaire = ($affectation) ? $affectation->getCalendrierScolaire() : false;
// $calendrierAffectation = ($calendrier_scolaire) ? "s" : "c";
// $yearBascule = ($affectation) ? $affectation->getDateBascule() : null;
// $yearBascule = ($yearBascule !== null) ? $yearBascule->format('Y') : null;
if ($affectation) {
$Idaffectation = $affectation->getIdAffectation();
$getRefCalendrier = $this->getEntityManager()
->getRepository(RefAffectationCalendrier::class)
->getRefCalendrier($Idaffectation);
$calendrierAffectation = ($getRefCalendrier['calendrierAffectation']) ? "s" : "c";
$yearBascule = $getRefCalendrier['yearBascule'];
} else {
$yearBascule = null;
$calendrier_scolaire = false;
$calendrierAffectation = ($calendrier_scolaire) ? "s" : "c";
}
$lastYear = $year - 1;
$nextYear = $year + 1;
$beforeLastYear = $year - 2;
// if($affectation) {
if ($calendrierAffectation == "s") {
if (($archive) && ($typeCalendrier == "s")) {
$dateDebutYear = new \DateTime("$lastYear-09-01");
$dateFinYear = new \DateTime("$year-08-31");
$dateDebutLastYear = new \DateTime("$beforeLastYear-09-01");
$dateFinLastYear = new \DateTime("$lastYear-08-31");
$labelDate = "07/09/$lastYear au 31/08/$year";
} elseif (($archive) && ($typeCalendrier == "c")) {
$dateDebutYear = new \DateTime("$year-01-01");
$dateFinYear = new \DateTime("$year-12-31");
$dateDebutLastYear = new \DateTime("$lastYear-01-01");
$dateFinLastYear = new \DateTime("$lastYear-12-31");
$labelDate = "01/01/$year au 31/12/$year";
} elseif ($year < $yearBascule) {
/* !!! */ // Transition
$dateDebutYear = new \DateTime("$nextYear-01-01");
$dateFinYear = new \DateTime("$nextYear-08-31");
$dateDebutLastYear = new \DateTime("$year-01-01");
$dateFinLastYear = new \DateTime("$year-08-31");
$labelDate = "01/01/$nextYear au 31/08/$nextYear";
} elseif ($year >= $yearBascule) {
$dateDebutYear = new \DateTime("$year-09-01");
$dateFinYear = new \DateTime("$nextYear-08-31");
$dateDebutLastYear = new \DateTime("$year-09-01");
$dateFinLastYear = new \DateTime("$nextYear-08-31");
$labelDate = "01/09/$year au 31/08/$nextYear";
} else {
$dateDebutYear = new \DateTime("$nextYear-01-01");
$dateFinYear = new \DateTime("$nextYear-08-31");
$dateDebutLastYear = new \DateTime("$year-01-01");
$dateFinLastYear = new \DateTime("$year-08-31");
$labelDate = "01/01/$year au 31/08/$year";
}
}
// calendrier civil
else {
if (!$archive && $year <= $yearBascule) {
/* !!! */
$dateDebutYear = new \DateTime("$nextYear-09-01");
$dateFinYear = new \DateTime("$nextYear-12-31");
$dateDebutLastYear = new \DateTime("$year-09-01");
$dateFinLastYear = new \DateTime("$year-12-31");
$labelDate = "01/09/$nextYear au 31/12/$nextYear";
} else {
// $affichePeriode = $year;
$dateDebutYear = new \DateTime("$year-01-01");
$dateFinYear = new \DateTime("$year-12-31");
$dateDebutLastYear = new \DateTime("$lastYear-01-01");
$dateFinLastYear = new \DateTime("$lastYear-12-31");
$labelDate = "01/01/$year au 31/12/$year";
}
}
// }
// if($federation){
// $dateDebutYear = ($calendrier_scolaire)? new \DateTime("$year-09-01"):new \DateTime("$year-01-01");
// $dateFinYear = ($calendrier_scolaire)?new \DateTime("$nextYear-08-31"):new \DateTime("$year-12-31");
// $dateDebutLastYear = ($calendrier_scolaire)?new \DateTime("$lastYear-09-01"):new \DateTime("$lastYear-01-01");
// $dateFinLastYear = ($calendrier_scolaire)?new \DateTime("$year-08-31"):new \DateTime("$lastYear-12-31");
// }
$qb = $this->createQueryBuilder('ui')
->select('ui.nom, ui.prenom, p.libellePoste, ra.libelleLong ,r_f.rSerLibl AS LibelleFederation')
// ->addselect('
// (SELECT refAff.calendrierScolaire
// FROM App\Entity\RefAffectation refAff
// WHERE refAff.idAffectation = :affectation
// ) as calendrierscolaire')
->addSelect('
(SELECT cdaCal.typeCalendrier
FROM App\Entity\CongeDroitAnnuel cdaCal
JOIN cdaCal.congeType calRtt
WHERE cdaCal.annee = :year
AND cdaCal.archive = :archive
AND cdaCal.utilisateur = ui.utilisateur
AND calRtt.code = :rtt
) as calendrierscolaire
')
// ajout CET
->addSelect('
(SELECT cdaCet.nbJourTotal
FROM App\Entity\CongeDroitAnnuel cdaCet
JOIN cdaCet.congeType ctCet
WHERE cdaCet.annee = :year
AND cdaCet.utilisateur = ui.utilisateur
AND cdaCet.archive = :archive
AND ctCet.code = :cet
) as totalCet
')
->addSelect('
(SELECT sum(cCet.nbJour)
FROM App\Entity\Conge cCet
JOIN cCet.congeType ctGivenCet
WHERE cCet.utilisateur = ui.utilisateur
AND cCet.dateDebut >= :dateDebut AND cCet.dateDebut <= :dateFin
AND ctGivenCet.code = :cet
AND cCet.workflow IN( :workflow )
) as givenCet
')
// fin CET
->addSelect('
(SELECT cdaRtt.nbJourTotal
FROM App\Entity\CongeDroitAnnuel cdaRtt
JOIN cdaRtt.congeType ctRtt
WHERE cdaRtt.annee = :year
AND cdaRtt.archive = :archive
AND cdaRtt.utilisateur = ui.utilisateur
AND ctRtt.code = :rtt
) as totalRtt
')
->addSelect('
(SELECT sum(cRtt.nbJour)
FROM App\Entity\Conge cRtt
JOIN cRtt.congeType ctGivenRtt
WHERE cRtt.utilisateur = ui.utilisateur
AND cRtt.dateDebut >= :dateDebut AND cRtt.dateDebut <= :dateFin
AND ctGivenRtt.code = :rtt
AND cRtt.workflow IN( :workflow )
) as givenRtt
')
->addSelect('
(SELECT rpt.nbJourTotal
FROM App\Entity\CongeDroitAnnuel rpt
JOIN rpt.congeType ctRAA
WHERE rpt.utilisateur = ui.utilisateur
AND rpt.annee = :year
AND rpt.archive = :archive
AND ctRAA.code = :RAA
) as totalReport
')
->addSelect('
(SELECT sum(cRAA.nbJour)
FROM App\Entity\Conge cRAA
JOIN cRAA.congeType ctGivenRAA
WHERE cRAA.utilisateur = ui.utilisateur
AND cRAA.dateDebut >= :dateDebut AND cRAA.dateDebut <= :dateFin
AND ctGivenRAA.code = :RAA
AND cRAA.workflow IN( :workflow )
) as givenRaa
')
->addSelect('
(SELECT cdaCa.nbJourTotal
FROM App\Entity\CongeDroitAnnuel cdaCa
JOIN cdaCa.congeType ctCa
WHERE cdaCa.annee = :year
AND cdaCa.utilisateur = ui.utilisateur
AND cdaCa.archive = :archive
AND ctCa.code = :can
) as totalCa
')
->addSelect('
(SELECT sum(cCa.nbJour)
FROM App\Entity\Conge cCa
JOIN cCa.congeType ctGivenCa
WHERE cCa.utilisateur = ui.utilisateur
AND cCa.dateDebut >= :dateDebut AND cCa.dateDebut <= :dateFin
AND ctGivenCa.code = :can
AND cCa.workflow IN( :workflow )
) as givenCa
')
->addSelect('
(SELECT cdaFracLastYear.nbJourFractionnement
FROM App\Entity\CongeDroitAnnuel cdaFracLastYear
JOIN cdaFracLastYear.congeType ctFracLastYear
WHERE cdaFracLastYear.utilisateur = ui.utilisateur
AND cdaFracLastYear.annee = :lastYear
AND cdaFracLastYear.archive = :archive
AND ctFracLastYear.code = :can
) as totalFracLastYear
')
->addSelect('
(SELECT sum(cCex.nbJour)
FROM App\Entity\Conge cCex
JOIN cCex.congeType ctGivenCex
WHERE cCex.utilisateur = ui.utilisateur
AND cCex.dateDebut >= :dateDebut AND cCex.dateDebut <= :dateFin
AND ctGivenCex.code = :cex
AND cCex.workflow IN( :workflow )
) as givenCex
')
->addSelect('
(SELECT cdaFrac.nbJourFractionnement
FROM App\Entity\CongeDroitAnnuel cdaFrac
JOIN cdaFrac.congeType ctFrac
WHERE cdaFrac.utilisateur = ui.utilisateur
AND cdaFrac.annee = :year
AND cdaFrac.archive = :archive
AND ctFrac.code = :can
) as totalFrac
')
->addSelect('
(SELECT cdaCaLastYear.nbJourTotal
FROM App\Entity\CongeDroitAnnuel cdaCaLastYear
JOIN cdaCaLastYear.congeType ctCaLastYear
WHERE cdaCaLastYear.utilisateur = ui.utilisateur
AND cdaCaLastYear.annee = :lastYear
AND cdaCaLastYear.archive = :archive
AND ctCaLastYear.code = :can
) as totalCanLastYear
')
->addSelect('
(SELECT sum(congeCa.nbJour)
FROM App\Entity\Conge congeCa
JOIN congeCa.congeType ctCongeCa
WHERE congeCa.utilisateur = ui.utilisateur
AND congeCa.dateDebut >= :lastYearDateDebut AND congeCa.dateDebut <= :lastYearDateFin
AND ctCongeCa.code = :can
AND congeCa.workflow IN( :workflow )
) as givenCanLastYear
')
->addSelect('
(SELECT sum(demandeReport.nbJour)
FROM App\Entity\DemandeReport demandeReport
WHERE demandeReport.utilisateur = ui.utilisateur
AND demandeReport.annee = :year
AND demandeReport.workflow IN( :workflow )
) as givenRAANextYear
');
$qb
->innerJoin('ui.utilisateur', 'u')
->innerJoin('ui.idPoste', 'p')
->innerJoin('ui.idAffectation', 'ra')
->innerJoin('ui.idFederation', 'rf')
->leftJoin('App\Entity\RFederation', 'r_f', 'WITH', 'rf.rAdmDiside = r_f.rAdmDiside')
->where('ui.idPoste IS NOT NULL')
->andWhere('ui.utilisateurActif = true');
if ($federation) {
$qb
->andWhere('ui.idFederation = :federation')
->andWhere('u.role = :role')
->setParameter('federation', $federation)
->setParameter('role', RefRole::ROLE_CTS);
} else if ($affectation) {
$qb
->andWhere('ui.idAffectation = :affectation')
->setParameter('affectation', $affectation);
}
$qb
->setParameter('year', $year)
->setParameter('rtt', 'RTT')
->setParameter('can', 'CAN')
->setParameter('RAA', 'RAA')
->setParameter('cex', 'CEX')
->setParameter('cet', 'CET')
->setParameter('dateDebut', ($dateDebutYear))
->setParameter('dateFin', ($dateFinYear))
->setParameter('workflow', [Workflow::CO_ACCEPTED, Workflow::CO_SIGN, Workflow::RE_SIGN], \Doctrine\DBAL\Connection::PARAM_STR_ARRAY)
->setParameter('lastYearDateDebut', ($dateDebutLastYear))
->setParameter('lastYearDateFin', ($dateFinLastYear))
->setParameter('lastYear', $lastYear)
// ->setParameter('affectation', $affectation)
->setParameter('archive', $archive);
$qb->orderBy('ui.nom, ui.prenom', 'DESC');
$result = $qb->getQuery()->getResult();
$result["labelDate"] = $labelDate;
return $result;
}
/**
* @param int $year
* @return mixed
* @throws \Doctrine\ORM\NonUniqueResultException
*/
public function getInfos(
Utilisateur $user,
?int $year,
?bool $archive = false
) {
// $ui = $this->getEntityManager()->getRepository(UtilisateurInformation::class)
// ->findOneBy(["utilisateur" => $user->getIdUtilisateur()]);
// $affectation = $ui->getIdAffectation();
$utilisateurInformation = $this->getEntityManager()->getRepository(UtilisateurInformation::class)
->findOneBy(["idUtilisateur" => $user->getIdUtilisateur()]);
$Idaffectation = $utilisateurInformation->getIdAffectation()->getIdAffectation();
$getRefCalendrier = $this->getEntityManager()
->getRepository(RefAffectationCalendrier::class)
->getRefCalendrier($Idaffectation);
$affectationCalendrier = ($getRefCalendrier['calendrierAffectation']) ? "s" : "c";
$yearBascule = $getRefCalendrier['yearBascule'];
$dateBascule = $getRefCalendrier['dateBascule'];
$affectationDateBascule = $dateBascule;
$currentDate = new \DateTime();
$currentDate = $currentDate->format('Y-m-d');
$cda_year = $this->getEntityManager()->getRepository(CongeDroitAnnuel::class)
->findOneBy(["utilisateur" => $user->getIdUtilisateur(), "annee" => $year, "archive" => $archive]);
$calendrier_year = ($cda_year) ? $cda_year->getTypeCalendrier() : $affectationCalendrier;
// $affectation = $this->getEntityManager()
// ->getRepository(RefAffectation::class)
// ->findOneBy(["idAffectation" => $Idaffectation]);
// $dateBascule = $affectation->getDateBascule();
// if ($dateBascule) {
// $yearBascule = intval($dateBascule->format('Y'));
// } else {
// $yearBascule = null;
// }
$lastYear = $year - 1;
$nextYear = $year + 1;
$beforeLastYear = $year - 2;
// calendrier scolaire
if ($affectationCalendrier == "s") {
if ($archive && ($calendrier_year == "c")) {
$dateDebut = new \DateTime("$year-01-01");
$dateFin = new \DateTime("$year-12-31");
$lastYearDateDebut = new \DateTime("$lastYear-01-01");
$lastYearDateFin = new \DateTime("$lastYear-12-31");
} elseif ($archive && ($calendrier_year == "s")) {
$dateDebut = new \DateTime("$lastYear-09-01");
$dateFin = new \DateTime("$year-08-31");
$lastYearDateDebut = new \DateTime("$beforeLastYear-09-01");
$lastYearDateFin = new \DateTime("$lastYear-08-31");
} elseif (!$archive && ($calendrier_year == "c") && ($year == $yearBascule - 1)) {
//Transition
$dateDebut = new \DateTime("$nextYear-01-01");
$dateFin = new \DateTime("$nextYear-08-31");
$lastYearDateDebut = new \DateTime("$year-01-01");
$lastYearDateFin = new \DateTime("$year-08-31");
} elseif ($year >= $yearBascule) {
$dateDebut = new \DateTime("$year-09-01");
$dateFin = new \DateTime("$nextYear-08-31");
$lastYearDateDebut = new \DateTime("$lastYear-09-01");
$lastYearDateFin = new \DateTime("$year-08-31");
} else {
$dateDebut = new \DateTime("$year-09-01");
$dateFin = new \DateTime("$nextYear-08-31");
$lastYearDateDebut = new \DateTime("$lastYear-09-01");
$lastYearDateFin = new \DateTime("$year-08-31");
}
}
// calendrier civil
else {
if ($archive) {
$dateDebut = new \DateTime("$year-01-01");
$dateFin = new \DateTime("$year-12-31");
$lastYearDateDebut = new \DateTime("$lastYear-01-01");
$lastYearDateFin = new \DateTime("$lastYear-12-31");
} elseif ($year <= $yearBascule && ($calendrier_year == "s")) {
//Transition
$dateDebut = new \DateTime("$year-09-01");
$dateFin = new \DateTime("$nextYear-01-01");
$lastYearDateDebut = new \DateTime("$year-01-01");
$lastYearDateFin = new \DateTime("$year-08-31");
} elseif ($year <= $yearBascule && ($calendrier_year == "c")) {
$dateDebut = new \DateTime("$nextYear-01-01");
$dateFin = new \DateTime("$nextYear-12-31");
$lastYearDateDebut = new \DateTime("$year-01-01");
$lastYearDateFin = new \DateTime("$year-08-31");
} else {
$dateDebut = new \DateTime("$year-01-01");
$dateFin = new \DateTime("$year-12-31");
$lastYearDateDebut = new \DateTime("$lastYear-01-01");
$lastYearDateFin = new \DateTime("$lastYear-12-31");
}
}
$query = $this->createQueryBuilder('ui')
->select('ui.nom, ui.prenom, p.libellePoste, ra.libelleLong as affectation, IDENTITY(ui.idFederation) as federation')
->addSelect('
(SELECT cdaCan.nbJourTotal
FROM App\Entity\CongeDroitAnnuel cdaCan
JOIN cdaCan.congeType ctCan
WHERE cdaCan.utilisateur = ui.utilisateur
AND cdaCan.annee = :year
AND cdaCan.archive = :archive
AND ctCan.code = :can
) as totalCan
')
->addSelect('
(SELECT sum(cCa.nbJour)
FROM App\Entity\Conge cCa
JOIN cCa.congeType ctGivenCa
WHERE cCa.utilisateur = ui.utilisateur
AND cCa.dateDebut >= :dateDebut AND cCa.dateDebut <= :dateFin
AND ctGivenCa.code = :can
AND cCa.workflow IN( :workflow )
) as givenCan
')
->addSelect('
(SELECT cdaRtt.nbJourTotal
FROM App\Entity\CongeDroitAnnuel cdaRtt
JOIN cdaRtt.congeType ctRtt
WHERE cdaRtt.utilisateur = ui.utilisateur
AND cdaRtt.annee = :year
AND cdaRtt.archive = :archive
AND ctRtt.code = :rtt
) as totalRtt
')
->addSelect('
(SELECT rpt.nbJourTotal
FROM App\Entity\CongeDroitAnnuel rpt
JOIN rpt.congeType ctRAA
WHERE rpt.utilisateur = ui.utilisateur
AND rpt.annee = :year
AND rpt.archive = :archive
AND ctRAA.code = :RAA
) as totalReport
')
->addSelect('
(SELECT sum(cRAA.nbJour)
FROM App\Entity\Conge cRAA
JOIN cRAA.congeType ctGivenRAA
WHERE cRAA.utilisateur = ui.utilisateur
AND cRAA.dateDebut >= :dateDebut AND cRAA.dateDebut <= :dateFin
AND ctGivenRAA.code = :RAA
AND cRAA.workflow IN( :workflow )
) as givenRaa
')
->addSelect('
(SELECT sum(cRtt.nbJour)
FROM App\Entity\Conge cRtt
JOIN cRtt.congeType ctGivenRtt
WHERE cRtt.utilisateur = ui.utilisateur
AND cRtt.dateDebut >= :dateDebut AND cRtt.dateDebut <= :dateFin
AND ctGivenRtt.code = :rtt
AND cRtt.workflow IN( :workflow )
) as givenRtt
')
->addSelect('
(SELECT sum(cCex.nbJour)
FROM App\Entity\Conge cCex
JOIN cCex.congeType ctGivenCex
WHERE cCex.utilisateur = ui.utilisateur
AND cCex.dateDebut >= :dateDebut AND cCex.dateDebut <= :dateFin
AND ctGivenCex.code = :cex
AND cCex.workflow IN( :workflow )
) as givenCex
')
->addSelect('
(SELECT cdaFrac.nbJourFractionnement
FROM App\Entity\CongeDroitAnnuel cdaFrac
JOIN cdaFrac.congeType ctFrac
WHERE cdaFrac.utilisateur = ui.utilisateur
AND cdaFrac.annee = :year
AND cdaFrac.archive = :archive
AND ctFrac.code = :can
) as totalFrac
')
->addSelect('
(SELECT cdaCaLastYear.nbJourTotal
FROM App\Entity\CongeDroitAnnuel cdaCaLastYear
JOIN cdaCaLastYear.congeType ctCaLastYear
WHERE cdaCaLastYear.utilisateur = ui.utilisateur
AND cdaCaLastYear.annee = :lastYear
AND cdaCaLastYear.archive = :archive
AND ctCaLastYear.code = :can
) as totalCanLastYear
')
->addSelect('
(SELECT sum(congeCa.nbJour)
FROM App\Entity\Conge congeCa
JOIN congeCa.congeType ctCongeCa
WHERE congeCa.utilisateur = ui.utilisateur
AND congeCa.dateDebut >= :lastYearDateDebut AND congeCa.dateDebut <= :lastYearDateFin
AND ctCongeCa.code = :can
AND congeCa.workflow IN( :workflow )
) as givenCanLastYear
')
// ajout CET
->addSelect('
(SELECT cdaCet.nbJourTotal
FROM App\Entity\CongeDroitAnnuel cdaCet
JOIN cdaCet.congeType ctCet
WHERE cdaCet.annee = :year
AND cdaCet.utilisateur = ui.utilisateur
AND cdaCet.archive = :archive
AND ctCet.code = :cet
) as totalCet
')
->addSelect('
(SELECT sum(cCet.nbJour)
FROM App\Entity\Conge cCet
JOIN cCet.congeType ctGivenCet
WHERE cCet.utilisateur = ui.utilisateur
AND cCet.dateDebut >= :dateDebut AND cCet.dateDebut <= :dateFin
AND ctGivenCet.code = :cet
AND cCet.workflow IN( :workflow )
) as givenCet
')
->addSelect('
(SELECT sum(demandeReport.nbJour)
FROM App\Entity\DemandeReport demandeReport
WHERE demandeReport.utilisateur = ui.utilisateur
AND demandeReport.annee = :year
AND demandeReport.workflow IN( :workflow )
) as givenRAANextYear
')
// fin CET
->innerJoin('ui.idPoste', 'p')
->innerJoin('ui.idAffectation', 'ra')
->andWhere('ui.utilisateur = :user');
$query
->setParameter('rtt', 'RTT')
->setParameter('RAA', 'RAA')
->setParameter('can', 'CAN')
->setParameter('cex', 'CEX')
->setParameter('cet', 'CET')
->setParameter('year', $year)
->setParameter('workflow', [Workflow::CO_ACCEPTED, Workflow::CO_SIGN, Workflow::RE_SIGN], \Doctrine\DBAL\Connection::PARAM_STR_ARRAY)
->setParameter('dateDebut', $dateDebut)
->setParameter('dateFin', $dateFin)
->setParameter('lastYearDateDebut', $lastYearDateDebut)
->setParameter('lastYearDateFin', $lastYearDateFin)
->setParameter('lastYear', $lastYear)
->setParameter('archive', $archive);
$query->setParameter('user', $user);
$result = $query->getQuery()->getOneOrNullResult();
$result['calendrier_year'] = $calendrier_year;
return $result;
}
public function filtreExport($results)
{
$i = 0;
$idlm = -1;
$idUtilisateur = -1;
$export = [];
foreach ($results as $key => $result) {
if ($result['idUtilisateur'] != $idUtilisateur) {
if ($idlm != $result['idlm']) {
$export[$i] = $result;
$idlm = $result['idlm'];
$i++;
}
$idlm = -1;
}
$idUtilisateur = $result['idUtilisateur'];
}
return $export;
}
function updateUserFop($idUtilisateur, $newFop)
{
$query = $this->createQueryBuilder('fop')
->update('App\Entity\UtilisateurInformation', 'fop')
->set('fop.idFop', ':idFop')
->setParameter(':idFop', $newFop)
->setParameter(':idUtilisateur', $idUtilisateur)
->where('fop.idUtilisateur = :idUtilisateur');
$query->getQuery()->execute();
}
function updateUserFoprinci($idUtilisateur, $newFoprinci)
{
$query = $this->createQueryBuilder('fop')
->update('App\Entity\UtilisateurInformation', 'fop')
->set('fop.idFoprinci', ':idFoprinci')
->setParameter(':idFoprinci', $newFoprinci)
->setParameter(':idUtilisateur', $idUtilisateur)
->where('fop.idUtilisateur = :idUtilisateur');
$query->getQuery()->execute();
}
public function findDrSuperieur($affectation)
{
$tableSup = array();
$query = $this->createQueryBuilder('ui')
->innerJoin('ui.utilisateur', 'u')
->leftJoin('ui.scan', 's')
->where('u.idRole IN (11)')
->andWhere('ui.idAffectation = :affectation')
->andWhere('ui.utilisateurActif=true')
->andWhere('ui.idAffectation NOT IN (:excludeAffectations)')
->setParameter(':affectation', $affectation)
->setParameter('excludeAffectations', [19, 18, 12, 24, 25, 26]);
$query->select('u.idUtilisateur');
$query->addOrderBy('CASE WHEN s.id IS NULL THEN 1 ELSE 0 END', 'ASC');
$res = $query->getQuery()->getResult();
foreach ($res as $id) {
$tableSup[] = $id['idUtilisateur'];
}
return $res[0]['idUtilisateur'];
}
public function findDsSuperieur($affectation)
{
$tableSup = array();
$query = $this->createQueryBuilder('ui')
->innerJoin('ui.utilisateur', 'u')
->leftJoin('ui.scan', 's')
->where('u.idRole=10')
->andWhere('ui.idAffectation = :affectation')
->andWhere('u.flSuperieurHierarchique=true')
->andWhere('ui.utilisateurActif=true')
->andWhere('ui.idAffectation NOT IN (:excludeAffectations)')
->setParameter(':affectation', $affectation)
->setParameter('excludeAffectations', [19, 18, 12, 24, 25, 26]);
$query->select('u.idUtilisateur,u.flSuperieurHierarchique');
$query->addOrderBy('CASE WHEN s.id IS NULL THEN 1 ELSE 0 END', 'ASC');
$res = $query->getQuery()->getResult();
return $res[0]['idUtilisateur'];
}
private static function getSessionsAll()
{
return "SELECT ui.id_utilisateur, ui.civilite, ui.nom, ui.prenom, ui.adresse, ra.id_affectation, ui.id_affectation as affectation_id,
ra.libelle_affectation, rf.id_federation, r_f.r_ser_libl,
rp.libelle_poste, u.id_role
FROM utilisateur_information ui
INNER JOIN ref_affectation ra ON ui.id_affectation = ra.id_affectation
INNER JOIN ref_federation rf ON ui.id_federation = rf.id_federation
INNER JOIN r_federation r_f ON rf.r_adm_diside = r_f.r_adm_diside
INNER JOIN ref_poste rp ON rp.id_poste = ui.id_poste
INNER JOIN utilisateur u ON ui.id_utilisateur = u.id_utilisateur";
}
private function executeGetSessionsQuery($query, $params)
{
$em = $this->getEntityManager();
$connection = $em->getConnection();
$statement = $connection->prepare($query);
$resultSet = $statement->executeQuery($params);
return $resultSet->fetchAllAssociative();
}
public function getUserInfoDTN($idFederation, $idPoste)
{
$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";
$params = [
'federation' => $idFederation,
'poste' => $idPoste,
];
return self::executeGetSessionsQuery($query, $params);
}
public function postInfosUtilisateur(UtilisateurInformation $entity)
{
$manager = $this->getEntityManager();
if ($entity instanceof UtilisateurInformation) {
$name = $entity->getNom();
$name = $this->cleanString($name);
$login = strtoupper((string) $name);
$firtString = $entity->getPrenom();
$firtString = strtoupper((string) $this->cleanString($firtString[0]));
$loginExist = $manager->getRepository(UtilisateurInformation::class)->findBy(
['login' => $login . $firtString]
);
$nb = is_countable($loginExist) ? count($loginExist) : 0;
if ($nb > 0) {
$loginLike = $manager->getRepository(UtilisateurInformation::class)->getLoginLike($login . $firtString);
$nbLike = is_countable($loginLike) ? count($loginLike) : 0;
$entity->setLogin($login . $firtString . $nbLike);
} else {
$entity->setLogin($login . $firtString);
}
$newPasswordUser = $entity->getDateDeNaissance()->format('dmY');
$entity->setPassword(hash('sha256', $newPasswordUser));
$manager->flush();
}
}
function cleanString($text)
{
$utf8 = [
'/[áàâãªä]/u' => 'a',
'/[ÁÀÂÃÄ]/u' => 'A',
'/[ÍÌÎÏ]/u' => 'I',
'/[íìîï]/u' => 'i',
'/[éèêë]/u' => 'e',
'/[ÉÈÊË]/u' => 'E',
'/[óòôõºö]/u' => 'o',
'/[ÓÒÔÕÖ]/u' => 'O',
'/[úùûü]/u' => 'u',
'/[ÚÙÛÜ]/u' => 'U',
'/ç/' => 'c',
'/Ç/' => 'C',
'/ñ/' => 'n',
'/Ñ/' => 'N',
'/–/u' => '',
// UTF-8 hyphen to "normal" hyphen
'/[’‘‹›‚]/u' => '',
// Literally a single quote
'/[“”«»„]/u' => '',
// Double quote
'/ /' => '',
];
return preg_replace(array_keys($utf8), array_values($utf8), (string) $text);
}
public function updateScanSignature($idUtilisateur, $idScan)
{
$conn = $this->getEntityManager()->getConnection();
$sql = "UPDATE utilisateur_information SET id_scan = :idScan WHERE id_utilisateur = :idUtilisateur";
$stmt = $conn->prepare($sql);
$stmt->bindValue('idScan', $idScan);
$stmt->bindValue('idUtilisateur', $idUtilisateur);
$resultSet = $stmt->executeQuery();
}
public function anneeMax($dates)
{
$maxYear = null;
foreach ((array) $dates as $date) {
$year = intval(substr($date, 0, 4));
if ($maxYear === null || $year > $maxYear) {
$maxYear = $year;
}
}
return $maxYear;
}
}