<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Config\Definition\Exception\Exception;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
use Symfony\Component\Routing\Annotation\Route;
use App\Entity\BilanActAutreInd;
use App\Entity\BilanActAutreIndAutre;
use App\Entity\BilanActInd;
use App\Entity\BilanActIndAutre;
use App\Entity\BilanLmActivite;
use App\Entity\BilanLmActiviteAutre;
use App\Entity\Parametre;
use App\Entity\HistoPoste;
use App\Entity\HistoFederation;
use App\Entity\HistoAffectation;
use App\Entity\ParametrageTexte;
use App\Entity\RFederation;
use App\Entity\UtilisateurInformation;
use App\Entity\Utilisateur;
use App\Entity\RefLieu;
use App\Entity\RefDiscipline;
use App\Entity\RefActiviteRefSousAction;
use App\Entity\RefSousActionRefAction;
use App\Entity\RefGabarit;
use App\Entity\LettreMission;
use App\Entity\Mission;
use App\Entity\PlmActiviteAutre;
use App\Entity\PlmActiviteAutreIndicAutre;
use App\Entity\PlmActiviteIndic;
use App\Entity\PlmActiviteIndicAutre;
use App\Entity\PlmIndicateurAutre;
use App\Entity\ProjetLettreMission;
use App\Entity\RapportActivite;
use App\Entity\RefDisciplineLm;
use App\Entity\RefFederation;
use App\Entity\RefFop;
use App\Entity\RefRole;
use App\Entity\Workflow;
use App\Entity\RefAffectation;
use Doctrine\Persistence\ManagerRegistry;
use App\Services\LmService;
use App\Services\CheckLastMission;
use App\Services\AccessRule;
use App\Services\MissionCheck;
use App\Services\GenerateLmPdf;
use App\Services\CloneLastPlm;
use App\Services\PlmService;
use App\Services\ExportExcelLms;
use App\Services\Mailer;
use App\Services\Lib\SpecializedJsonResponse;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Email;
use Twig\Environment;
use App\Services\Lib\EmailSHDecision;
/**
* Description of HomeController
*
* @author Maxime Dequant
*/
class LmController extends AbstractController
{
private ManagerRegistry $doctrine;
private LmService $lmService;
private CheckLastMission $checkLastMission;
private AccessRule $accessRule;
private MissionCheck $missionCheck;
private GenerateLmPdf $generateLmPdf;
private CloneLastPlm $cloneLastPlm;
private PlmService $plmService;
private ExportExcelLms $exportExcelLms;
private MailerInterface $mailer;
private MailerInterface $mailerInterface;
private SpecializedJsonResponse $specializedJsonResponse;
private EmailSHDecision $emailSHDecision;
private $twig;
public function __construct(
ManagerRegistry $doctrine,
LmService $lmService,
CheckLastMission $checkLastMission,
AccessRule $accessRule,
MissionCheck $missionCheck,
GenerateLmPdf $generateLmPdf,
CloneLastPlm $cloneLastPlm,
PlmService $plmService,
ExportExcelLms $exportExcelLms,
MailerInterface $mailer,
Environment $twig,
EmailSHDecision $emailSHDecision,
MailerInterface $mailerInterface,
SpecializedJsonResponse $specializedJsonResponse
) {
$this->doctrine = $doctrine;
$this->lmService = $lmService;
$this->checkLastMission = $checkLastMission;
$this->accessRule = $accessRule;
$this->missionCheck = $missionCheck;
$this->generateLmPdf = $generateLmPdf;
$this->cloneLastPlm = $cloneLastPlm;
$this->plmService = $plmService;
$this->exportExcelLms = $exportExcelLms;
$this->mailer = $mailer;
$this->specializedJsonResponse = $specializedJsonResponse;
$this->twig = $twig;
$this->mailerInterface = $mailerInterface;
$this->emailSHDecision = $emailSHDecision;
}
#[Route(path: '/api/lm_action', name: 'ctsweb_lm_action')]
public function Lm()
{
$repositoryLM = $this->doctrine->getManager()->getRepository(LettreMission::class);
try {
$result = $repositoryLM->findLettreMission($this->getUser()->getIdUtilisateur(), 'current2');
if (isset($result[0])) {
$result[0]['verfication'] = $this->getParameter('verification');
$result[0]['link'] = sha1((string) $result[0]['idLm']);
} else {
$result = [];
}
$data = ['success' => true, 'data' => $result];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
#[Route(path: '/api/lm_archive', name: 'ctsweb_lm_archive')]
public function LmArchive(Request $request)
{
try {
$data = json_decode($request->getContent(), true);
$request->request->replace(is_array($data) ? $data : array());
$parametres = $request->request->all();
$id = isset($parametres['idCts']) ? $parametres['idCts'] : $this->getUser()->getIdUtilisateur();
$data = ['success' => true, 'data' => $this->lmService->getLmArchivees($id)];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
#[Route(path: '/api/plm_action', name: 'ctsweb_plm_action')]
public function Plm()
{
$repositoryPLM = $this->doctrine->getManager()->getRepository(ProjetLettreMission::class);
try {
$result = $repositoryPLM->findProjetLettreMission($this->getUser()->getIdUtilisateur());
if ($result) {
$result['lien'] = sha1((string) $result['idProjetLm']);
}
$data = ['success' => true, 'data' => ($result ?? [])];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
#[Route(path: '/api/lm_mes_cts', name: 'ctsweb_lm_mes_cts')]
public function LmMesCts()
{
try {
$user = $this->getUser();
$listeCts = $this->lmService->getLmInMyPerimeter(
['role' => $user->getUtilisateur()->getIdRole(), 'federation' => $user->getIdFederation(), 'affectation' => $user->getIdAffectation()]
);
//$data = ['success' => true, 'data' => ['listeCts' => $listeCts, 'urlSignature' => $this->getParameter("verification")]];
$data = ['success' => true, 'data' => ['listeCts' => $listeCts]];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
public function PlmMesCtsAction()
{
$user = $this->getUser();
$repositoryUI = $this->doctrine->getManager()->getRepository(UtilisateurInformation::class);
$repositoryPLM = $this->doctrine->getManager()->getRepository(ProjetLettreMission::class);
try {
$listeCts = $repositoryUI->getCtsInformationGeneralList(
['role' => $user->getUtilisateur()->getIdRole(), 'federation' => $user->getIdFederation(), 'affectation' => $user->getIdAffectation()]
);
$data = ['success' => true, 'data' => $repositoryPLM->projetLettresMissionDeMesCts($listeCts)];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
public function LmASignerAction()
{
$repositoryLM = $this->doctrine->getManager()->getRepository(LettreMission::class);
$repositoryUI = $this->doctrine->getManager()->getRepository(UtilisateurInformation::class);
try {
$listeCts = $repositoryUI->getCtsInformationGeneralList(
['role' => $this->getUser()->getUtilisateur()->getIdRole(), 'federation' => $this->getUser()->getIdFederation(), 'affectation' => $this->getUser()->getIdAffectation()]
);
$data = $repositoryLM->lettresMissionASigner($listeCts);
$success = true;
} catch (\Exception $e) {
$success = false;
$data = $e->getMessage();
error_log($e->getMessage());
}
return $this->specializedJsonResponse->getJson($success, $data);
}
#[Route(path: '/api/afficher_rapports', name: 'ctsweb_afficher_rapports_activite')]
public function AfficherRapportActivite()
{
try {
$em = $this->doctrine->getManager();
$listRapports = $em->getRepository(RapportActivite::class)->findAllReportOfActivitiesByUser($this->getUser()->getIdUtilisateur());
$result = [];
foreach ($listRapports as $key => $ra) {
$result[$key]['dateDeCreation'] = $ra['dateDeCreation']->format('d/m/Y');
$result[$key]['dateDeExpiration'] = $ra['dateDeCreation']->add(new \DateInterval('P90D'))->format('d/m/Y');
$result[$key]['dateDebutRA'] = $ra['dateDebutRA']->format('d/m/Y');
$result[$key]['dateFinRA'] = $ra['dateFinRA']->format('d/m/Y');
$result[$key]['dateDebutPLM'] = $ra['dateDebutPLM']->format('d/m/Y');
$result[$key]['dateFinPLM'] = $ra['dateFinPLM']->format('d/m/Y');
$result[$key]['idRapportAct'] = $ra['idRapportActivite'];
}
$data = ['success' => true, 'data' => $result];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
#[Route(path: '/api/create_rapport_donnees', name: 'ctsweb_create_rapport_activite_donnees')]
public function CreateRapportActiviteDonnees()
{
$repositoryLM = $this->doctrine->getManager()->getRepository(LettreMission::class);
$repositoryR_F = $this->doctrine->getManager()->getRepository(RFederation::class);
try {
$lms = $repositoryLM->findAllLettreMission($this->getUser()->getIdUtilisateur());
$lmArray = [];
$lmArray[0]['libelle'] = 'Aucune';
foreach ($lms as $lm) {
$lmArray[$lm['idLm']]['libelle'] = $lm['libelleRole'] . '-' .
$repositoryR_F->findOneByRAdmDiside($this->getUser()->getIdFederation()->getRAdmDiside())->getLibelleSport() . '-' .
$this->getUser()->getIdAffectation()->getLibelleAffectation();
$lmArray[$lm['idLm']]['dateDebut'] = $lm['dateDebut']->format('d/m/Y');
$lmArray[$lm['idLm']]['dateFin'] = $lm['dateFin']->format('d/m/Y');
}
$success = true;
} catch (\Exception $e) {
$success = false;
$lmArray = $e->getMessage();
}
return $this->specializedJsonResponse->getJson($success, $lmArray);
}
#[Route(path: '/api/create_rapport_donnees', name: 'ctsweb_create_rapport_activite_donnees')]
public function CreateRapportActivite(Request $request)
{
$requestForm = $request->request->all();
$em = $this->doctrine->getManager();
try {
$dateDebutRA = \DateTime::createFromFormat('d/m/Y', $requestForm['dateDebutRA']);
$dateFinRA = \DateTime::createFromFormat('d/m/Y', $requestForm['dateFinRA']);
$rapportActivite = new RapportActivite();
$rapportActivite->setIdLm($requestForm['idLm']);
$rapportActivite->setDateDeCreation(new \DateTime());
$rapportActivite->setDateDeDebut($dateDebutRA);
$rapportActivite->setDateDeFin($dateFinRA);
$rapportActivite->setIdUtilisateur($this->getUser()->getIdUtilisateur());
$em->persist($rapportActivite);
$em->flush();
$data = 'Le rapport d\'activité a bien été enregistré';
$success = true;
} catch (\Exception $e) {
$success = false;
$data = $e->getMessage();
}
return $this->specializedJsonResponse->getJson($success, $data);
}
#[Route(path: '/api/suppr_rapport', name: 'ctsweb_suppr_rapport_activite')]
public function SupprimerRapportActivite(Request $request)
{
$requestForm = $request->request->all();
$repositoriesBilan = [];
array_push($repositoriesBilan, $this->doctrine->getManager()->getRepository(BilanActAutreInd::class));
array_push($repositoriesBilan, $this->doctrine->getManager()->getRepository(BilanActAutreIndAutre::class));
array_push($repositoriesBilan, $this->doctrine->getManager()->getRepository(BilanActInd::class));
array_push($repositoriesBilan, $this->doctrine->getManager()->getRepository(BilanActIndAutre::class));
array_push($repositoriesBilan, $this->doctrine->getManager()->getRepository(BilanLmActivite::class));
array_push($repositoriesBilan, $this->doctrine->getManager()->getRepository(BilanLmActiviteAutre::class));
$em = $this->doctrine->getManager();
try {
$rapportActivite = $em->find('App\Entity\RapportActivite', $requestForm['idRapportActivite']);
foreach ($repositoriesBilan as $rpb) {
$bilans = $rpb->findByIdRapportActivite($requestForm['idRapportActivite']);
foreach ($bilans as $b) {
if ($b != null) {
$em->remove($b);
}
}
}
if ($rapportActivite != null) {
$em->remove($rapportActivite);
}
$em->flush();
$data = ['success' => true, 'data' => 'Le rapport d\'activité a bien été supprimé'];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
error_log($e->getMessage());
}
$response = new \Symfony\Component\HttpFoundation\Response(json_encode($data, JSON_THROW_ON_ERROR));
return $response;
}
#[Route(path: '/api/getDonneesCreatePlm/{idUtilisateur}', name: 'ctsweb_get_donnees_create_plm')]
public function getDonneesCreatePlm($idUtilisateur)
{
$repositoryLM = $this->doctrine->getManager()->getRepository(LettreMission::class);
$repositoryUi = $this->doctrine->getManager()->getRepository(UtilisateurInformation::class);
$repositoryRefFederation = $this->doctrine->getManager()->getRepository(RefFederation::class);
try {
$infoUser = $repositoryUi->findDataForPageProfil($idUtilisateur);
$infoUser['saisonSportive'] = $repositoryRefFederation->find($infoUser['idFederation'])->getSaisonSportiveFederation();
$dataInfoCreatePlm = (null != $repositoryLM->findInformationsCreationPlm($idUtilisateur)) ? $repositoryLM->findInformationsCreationPlm($idUtilisateur) : [];
if (!empty($dataInfoCreatePlm) && is_array($dataInfoCreatePlm)) {
$plmOk = $dataInfoCreatePlm['dateChangementAdministratif'] == null || $dataInfoCreatePlm['dateChangementAdministratif'] > new \DateTime();
} else {
$plmOk = false;
}
$repositoryRefFop = $this->doctrine->getManager()->getRepository(RefFop::class);
$libFop = $repositoryRefFop->findDonneesAdmin();
$repositoryRefLieu = $this->doctrine->getManager()->getRepository(RefLieu::class);
$libLieu = $repositoryRefLieu->findDonneesAdmin();
$repositoryRefDiscipline = $this->doctrine->getManager()->getRepository(RefDiscipline::class);
$libDiscipline = $repositoryRefDiscipline->findDonneesAdmin($infoUser['idFederation']);
$data = ["infoCts" => $infoUser, "infosLmEc" => $plmOk ? $dataInfoCreatePlm : null, "libelleLieu" => $libLieu, "libelleDiscipline" => $libDiscipline, "libelleFop" => $libFop];
$success = true;
} catch (\Exception $e) {
$success = false;
$data = $e->getMessage();
error_log($e->getMessage());
}
// var_dump($libFop );
// die();
return $this->specializedJsonResponse->getJson($success, $data);
}
#[Route(path: '/api/plm_mes_cts', name: 'cts_plm_liste')]
public function getPlmByLmForAllStep()
{
$listPlm = [];
// Récupération des LM en cours de validités
$listUserForValidPlm = $this->getCheckLmInCurrentDay();
$listProjectLm = $this->getListProjectLmByRole();
$delai = $this->doctrine->getManager()->getRepository(Parametre::class)->recupererParametre();
if (1 != preg_match('/^\d*$/', (string) $delai)) {
throw new \Exception("La durée de la récupération de projet de lettre de missions n'est pas définie.");
}
$delai = new \DateInterval("P{$delai}D");
$curentDay = (new \DateTime())->format('Y-m-d');
$i = 0;
foreach ($listProjectLm as $key => $plm) {
$listPlm[] = ['civilite' => $plm['civilite'], 'nom' => $plm['nom'], 'prenom' => $plm['prenom'], 'matriculeAgent' => $plm['matricule_agent'], "grade" => $plm['grade'] ?? "", "indiceMajore" => $plm['indice_majore'], "adresse" => $plm['adresse'], "uiFonctionCompl" => $plm['ui_fonction_compl'], "uiCadreGeneral" => $plm['ui_cadre_general'], 'libellePoste' => $plm['libelle_poste'], 'libelleLong' => $plm['libelle_long'], 'rAdmDiside' => $plm['r_adm_diside'], 'rSerLibc' => $plm['r_ser_libc'], 'rSerLibl' => $plm['r_ser_libl'], 'idUtilisateur' => $plm['id_utilisateur'], 'idFederation' => $plm['id_federation'], 'idRole' => $plm['id_role'], 'idAffectation' => $plm['id_affectation']];
/**
* Création d'une nouvelle lettre de missions
* Cas 1: Changement adminitratif
* Cas 2: PLM en cours à l'état signé et date de fin antérieure à la date du jour
*/
if (
($plm['date_changement_administratif'] != null && $plm['date_changement_administratif'] <= $curentDay) ||
($plm['id_workflow'] == Workflow::LM_SIGNEE)
) {
$listPlm[$key]['projetLettreMission'] = null;
$listPlm[$key]['lmValide'] = 0;
if ($plm['date_changement_administratif'] != null && $plm['date_changement_administratif'] <= $curentDay) {
$listPlm[$key]['date_changement_administratif'] = $plm['date_changement_administratif'];
}
} else {
$keyliste = array_search($plm['id_utilisateur'], array_column($listUserForValidPlm, 'idUtilisateur'));
if ($keyliste === false || $plm['date_changement_administratif'] != null) {
$listPlm[$key]['lmValide'] = 0;
} else {
$listPlm[$key]['lmValide'] = 1;
}
$recupLettre = $listPlm[$key]['lmValide'] ? false : new \DateTime() >= (new \DateTime($plm['date']))->add($delai);
$newDateFin = date("d/m/Y", strtotime((string) $plm['date_fin']));
$newDateDebut = date("d/m/Y", strtotime((string) $plm['date_debut']));
$i++;
$listPlm[$key]['projetLettreMission'] = ['idProjetLm' => $plm['id_projet_lm'], 'idWorkflow' => $plm['id_workflow'], 'libelleFop' => $plm['libelle_fop'], 'idLieu' => $plm['id_lieu'], 'cadreGeneral' => $plm['ordre_de_mission_general'], 'saisonSportive' => $plm['saison_sportive'], 'idFop' => $plm['id_fop'], 'federation' => $plm['r_ser_libl'], 'affectation' => $plm['libelle_long'], 'dateDebut' => $newDateDebut, 'dateFin' => $newDateFin, 'etape' => $plm['id_workflow'], 'libelleAction' => $plm['libelle_action'], 'recupLettre' => $recupLettre];
}
}
$listPlmForNewCts = [];
$listProjectLmValide = $this->getListProjectLmByRoleForNewCts();
foreach ($listProjectLmValide as $plmNewCts) {
$found = false;
foreach ($listPlm as $key => $val) {
if ($val['idUtilisateur'] === $plmNewCts['id_utilisateur']) {
$found = true;
break;
}
}
if (!$found) {
$listPlmForNewCts[] = ['civilite' => $plmNewCts['civilite'], 'nom' => $plmNewCts['nom'], 'prenom' => $plmNewCts['prenom'], 'matriculeAgent' => $plmNewCts['matricule_agent'], 'grade' => $plmNewCts['grade'], 'indiceMajore' => $plmNewCts['indice_majore'], 'adresse' => $plmNewCts['adresse'], 'uiFonctionCompl' => $plmNewCts['ui_fonction_compl'], 'uiCadreGeneral' => $plmNewCts['ui_cadre_general'], 'libellePoste' => $plmNewCts['libelle_poste'], 'libelleLong' => $plmNewCts['libelle_long'], 'rAdmDiside' => $plmNewCts['r_adm_diside'], 'rSerLibc' => $plmNewCts['r_ser_libc'], 'rSerLibl' => $plmNewCts['r_ser_libl'], 'idUtilisateur' => $plmNewCts['id_utilisateur'], 'idFederation' => $plmNewCts['id_federation'], 'idAffectation' => $plmNewCts['id_affectation'], 'idRole' => $plmNewCts['id_role'], 'projetLettreMission' => null, 'lmValide' => 0];
}
}
$allListLm = array_merge($listPlm, $listPlmForNewCts);
asort($allListLm, 1);
return new JsonResponse(['success' => true, 'data' => $allListLm]);
}
public function getPlmByLmForAllStepBeforeSignatureAction()
{
$listPlm = [];
// Récupération des LM en cours de validités
$listUserForValidPlm = $this->getCheckLmInCurrentDay();
$listProjectLm = $this->getListProjectLmByRoleBeforeWorkflow(Workflow::LM_SIGNEE);
$delai = $this->doctrine->getManager()->getRepository(Parametre::class)->recupererParametre();
if (1 != preg_match('/^\d*$/', (string) $delai)) {
throw new \Exception("La durée de la récupération de projet de lettre de missions n'est pas définie.");
}
$delai = new \DateInterval("P{$delai}D");
$curentDay = (new \DateTime())->format('Y-m-d');
$i = 0;
foreach ($listProjectLm as $key => $plm) {
$listPlm[] = ['civilite' => $plm['civilite'], 'nom' => $plm['nom'], 'prenom' => $plm['prenom'], 'matriculeAgent' => $plm['matricule_agent'], "grade" => $plm['grade'], "indiceMajore" => $plm['indice_majore'], "adresse" => $plm['adresse'], "uiFonctionCompl" => $plm['ui_fonction_compl'], "uiCadreGeneral" => $plm['ui_cadre_general'], 'libellePoste' => $plm['libelle_poste'], 'libelleLong' => $plm['libelle_long'], 'rAdmDiside' => $plm['r_adm_diside'], 'rSerLibc' => $plm['r_ser_libc'], 'rSerLibl' => $plm['r_ser_libl'], 'idUtilisateur' => $plm['id_utilisateur'], 'idFederation' => $plm['id_federation'], 'idRole' => $plm['id_role'], 'idAffectation' => $plm['id_affectation']];
/**
* Création d'une nouvelle lettre de missions
* Cas 1: Changement adminitratif
* Cas 2: PLM en cours à l'état signé et date de fin antérieure à la date du jour
*/
if (
($plm['date_changement_administratif'] != null && $plm['date_changement_administratif'] <= $curentDay) ||
($plm['id_workflow'] == Workflow::LM_SIGNEE && $plm['date_fin'] <= $curentDay)
) {
$listPlm[$key]['projetLettreMission'] = null;
$listPlm[$key]['lmValide'] = 0;
if ($plm['date_changement_administratif'] != null && $plm['date_changement_administratif'] <= $curentDay) {
$listPlm[$key]['date_changement_administratif'] = $plm['date_changement_administratif'];
}
} else {
$keyliste = array_search($plm['id_utilisateur'], array_column($listUserForValidPlm, 'idUtilisateur'));
if ($keyliste === false || $plm['date_changement_administratif'] != null) {
$listPlm[$key]['lmValide'] = 0;
} else {
$listPlm[$key]['lmValide'] = 1;
}
$recupLettre = $listPlm[$key]['lmValide'] ? false : new \DateTime() >= (new \DateTime($plm['date']))->add($delai);
$newDateFin = date("d/m/Y", strtotime((string) $plm['date_fin']));
$newDateDebut = date("d/m/Y", strtotime((string) $plm['date_debut']));
$i++;
$listPlm[$key]['projetLettreMission'] = ['idProjetLm' => $plm['id_projet_lm'], 'idWorkflow' => $plm['id_workflow'], 'libelleFop' => $plm['libelle_fop'], 'idLieu' => $plm['id_lieu'], 'cadreGeneral' => $plm['ordre_de_mission_general'], 'saisonSportive' => $plm['saison_sportive'], 'idFop' => $plm['id_fop'], 'federation' => $plm['r_ser_libl'], 'affectation' => $plm['libelle_long'], 'dateDebut' => $newDateDebut, 'dateFin' => $newDateFin, 'etape' => $plm['id_workflow'], 'libelleAction' => $plm['libelle_action'], 'recupLettre' => $recupLettre];
}
}
$listPlmForNewCts = [];
$listProjectLmValide = $this->getListProjectLmByRoleForNewCtsBeforeWorkflow(Workflow::LM_SIGNEE);
foreach ($listProjectLmValide as $plmNewCts) {
$found = false;
foreach ($listPlm as $key => $val) {
if ($val['idUtilisateur'] === $plmNewCts['id_utilisateur']) {
$found = true;
break;
}
}
if (!$found) {
$listPlmForNewCts[] = ['civilite' => $plmNewCts['civilite'], 'nom' => $plmNewCts['nom'], 'prenom' => $plmNewCts['prenom'], 'matriculeAgent' => $plmNewCts['matricule_agent'], 'grade' => $plmNewCts['grade'], 'indiceMajore' => $plmNewCts['indice_majore'], 'adresse' => $plmNewCts['adresse'], 'uiFonctionCompl' => $plmNewCts['ui_fonction_compl'], 'uiCadreGeneral' => $plmNewCts['ui_cadre_general'], 'libellePoste' => $plmNewCts['libelle_poste'], 'libelleLong' => $plmNewCts['libelle_long'], 'rAdmDiside' => $plmNewCts['r_adm_diside'], 'rSerLibc' => $plmNewCts['r_ser_libc'], 'rSerLibl' => $plmNewCts['r_ser_libl'], 'idUtilisateur' => $plmNewCts['id_utilisateur'], 'idFederation' => $plmNewCts['id_federation'], 'idAffectation' => $plmNewCts['id_affectation'], 'idRole' => $plmNewCts['id_role'], 'projetLettreMission' => null, 'lmValide' => 0];
}
}
$allListLm = array_merge($listPlm, $listPlmForNewCts);
asort($allListLm, 1);
return new JsonResponse(['success' => true, 'data' => $allListLm]);
}
private function getListProjectLmByRole()
{
$user = $this->getUser();
$userRole = $user->getUtilisateur()->getIdRole();
$em = $this->doctrine->getManager()->getRepository(ProjetLettreMission::class);
$listPlm = [];
switch ($userRole) {
case RefRole::ROLE_FEDE:
case RefRole::ROLE_FEDE_INVITE:
$federation = $user->getIdFederation()->getIdFederation();
$idUtilisateur = $user->getUtilisateur()->getIdUtilisateur();
$listPlm = $em->findDtnProjectForLmOptimisation($federation, $idUtilisateur);
break;
case RefRole::ROLE_DR_SIGNATAIRE:
case RefRole::ROLE_DR:
$userAffecation = $this->getUser()->getIdAffectation()->getIdAffectation();
$listPlm = $em->findDrForLmOptimisation($userAffecation);
break;
case RefRole::ROLE_DS_ADMIN:
case RefRole::ROLE_DS_INVITE:
case RefRole::ROLE_DS_SIGNATAIRE:
case RefRole::ROLE_LECTEUR:
$listPlm = $em->findDsProjectForLmOptimisation();
break;
}
return $listPlm;
}
private function getListProjectLmByRoleBeforeWorkflow(int $workflow)
{
$user = $this->getUser();
$userRole = $user->getUtilisateur()->getIdRole();
$em = $this->doctrine->getManager()->getRepository(ProjetLettreMission::class);
$listPlm = [];
switch ($userRole) {
case RefRole::ROLE_FEDE:
case RefRole::ROLE_FEDE_INVITE:
$federation = $user->getIdFederation()->getIdFederation();
$idUtilisateur = $user->getUtilisateur()->getIdUtilisateur();
$listPlm = $em->findDtnProjectForLmOptimisationToWorkflow($federation, $idUtilisateur, $workflow);
break;
case RefRole::ROLE_DR_SIGNATAIRE:
case RefRole::ROLE_DR:
$userAffecation = $this->getUser()->getIdAffectation()->getIdAffectation();
$listPlm = $em->findDrForLmOptimisationToWorkflow($userAffecation, $workflow);
break;
case RefRole::ROLE_DS_ADMIN:
case RefRole::ROLE_DS_INVITE:
case RefRole::ROLE_DS_SIGNATAIRE:
case RefRole::ROLE_LECTEUR:
$listPlm = $em->findDsProjectForLmOptimisationToWorkflow($workflow);
break;
}
return $listPlm;
}
private function getListProjectLmByRoleobj()
{
$user = $this->getUser();
$userRole = $user->getUtilisateur()->getIdRole();
$em = $this->doctrine->getManager()->getRepository(ProjetLettreMission::class);
$listPlm = [];
switch ($userRole) {
case RefRole::ROLE_FEDE:
case RefRole::ROLE_FEDE_INVITE:
$federation = $user->getIdFederation()->getIdFederation();
$idUtilisateur = $user->getUtilisateur()->getIdUtilisateur();
$listPlm = $em->findDtnProjectForLmOptimisationobj($federation, $idUtilisateur);
break;
case RefRole::ROLE_DR_SIGNATAIRE:
case RefRole::ROLE_DR:
$userAffecation = $this->getUser()->getIdAffectation()->getIdAffectation();
$listPlm = $em->findDrForLmOptimisationobj($userAffecation);
break;
case RefRole::ROLE_DS_ADMIN:
case RefRole::ROLE_DS_INVITE:
case RefRole::ROLE_DS_SIGNATAIRE:
case RefRole::ROLE_LECTEUR:
$listPlm = $em->findDsProjectForLmOptimisationobj();
break;
}
return $listPlm;
}
private function getCheckLmInCurrentDay()
{
$user = $this->getUser();
$userRole = $user->getUtilisateur()->getIdRole();
$repPlm = $this->doctrine->getManager()->getRepository(ProjetLettreMission::class);
$listUserForPlmValid = [];
switch ($userRole) {
case RefRole::ROLE_FEDE:
case RefRole::ROLE_FEDE_INVITE:
$federation = $user->getIdFederation()->getIdFederation();
$listUserForPlmValid = $repPlm->findListUserValidLmForToDate($federation, '');
break;
case RefRole::ROLE_DR_SIGNATAIRE:
case RefRole::ROLE_DR:
$userAffecation = $user->getIdAffectation()->getIdAffectation();
$listUserForPlmValid = $repPlm->findListUserValidLmForToDate('', $userAffecation);
break;
case RefRole::ROLE_DS_ADMIN:
case RefRole::ROLE_DS_INVITE:
case RefRole::ROLE_DS_SIGNATAIRE:
case RefRole::ROLE_LECTEUR:
$listUserForPlmValid = $repPlm->findListUserValidLmForToDate();
break;
}
return $listUserForPlmValid;
}
private function getListProjectLmByRoleForNewCts()
{
$userRole = $this->getUser()->getUtilisateur()->getIdRole();
$em = $this->doctrine->getManager();
$listPlmForNewCts = [];
switch ($userRole) {
case RefRole::ROLE_FEDE:
case RefRole::ROLE_FEDE_INVITE:
$federation = $this->getUser()->getIdFederation()->getIdFederation();
$listPlmForNewCts = $em->getRepository(ProjetLettreMission::class)->findDtnProjectForNewCtsLmOptimisation($federation);
break;
case RefRole::ROLE_DS_ADMIN:
case RefRole::ROLE_DS_INVITE:
case RefRole::ROLE_DS_SIGNATAIRE:
case RefRole::ROLE_LECTEUR:
$listPlmForNewCts = $em->getRepository(ProjetLettreMission::class)->findDsProjectForNewDtnOptimisation();
break;
}
return $listPlmForNewCts;
}
private function getListProjectLmByRoleForNewCtsBeforeWorkflow(int $workflow)
{
$userRole = $this->getUser()->getUtilisateur()->getIdRole();
$em = $this->doctrine->getManager();
$listPlmForNewCts = [];
switch ($userRole) {
case RefRole::ROLE_FEDE:
case RefRole::ROLE_FEDE_INVITE:
$federation = $this->getUser()->getIdFederation()->getIdFederation();
$listPlmForNewCts = $em->getRepository(ProjetLettreMission::class)->findDtnProjectForNewCtsLmOptimisation($federation);
break;
case RefRole::ROLE_DS_ADMIN:
case RefRole::ROLE_DS_INVITE:
case RefRole::ROLE_DS_SIGNATAIRE:
case RefRole::ROLE_LECTEUR:
$listPlmForNewCts = $em->getRepository(ProjetLettreMission::class)->findDsProjectForNewDtnOptimisation();
break;
}
foreach ($listPlmForNewCts as $key => $plm) {
if ($plm['id_workflow'] > $workflow) {
unset($listPlmForNewCts[$key]);
}
}
return $listPlmForNewCts;
}
#[Route(path: '/api/lm_a_signer', name: 'ctsweb_lm_a_signer')]
public function lmAsignerOptimisation()
{
try {
$listPlm = [];
$em = $this->doctrine->getManager();
$userAffecation = $this->getUser()->getIdAffectation()->getIdAffectation();
$listLmASigner = $em->getRepository(ProjetLettreMission::class)->findListeLmForSigne($userAffecation);
foreach ($listLmASigner as $key => $plm) {
$listPlm[] = ['civilite' => $plm['civilite'], 'nom' => $plm['nom'], 'prenom' => $plm['prenom'], 'libellePoste' => $plm['libelle_poste'], 'libelleLong' => $plm['libelle_long'], 'rAdmDiside' => $plm['r_adm_diside'], 'rSerLibc' => $plm['r_ser_libc'], 'rSerLibl' => $plm['r_ser_libl'], 'idUtilisateur' => $plm['id_utilisateur'], 'idFederation' => $plm['id_federation'], 'idRole' => $plm['id_role'], 'idAffectation' => $plm['id_affectation']];
$newDateFin = date("d/m/Y", strtotime((string) $plm['date_fin']));
$newDateDebut = date("d/m/Y", strtotime((string) $plm['date_debut']));
$listPlm[$key]['lettreMission'] = ['idProjetLm' => $plm['id_projet_lm'], 'idFop' => $plm['id_fop'], 'libelleFop' => $plm['libelle_fop'], 'federation' => $plm['r_ser_libl'], 'affectation' => $plm['libelle_long'], 'dateDebut' => $newDateDebut, 'dateFin' => $newDateFin, 'etape' => $plm['id_workflow'], 'libelleAction' => $plm['libelle_action']];
}
$data = ['success' => true, 'data' => $listPlm];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
#[Route(path: '/api/getDonneesPlm/{plm}', name: 'cts_web_modif_plm')]
public function getDonneesPlm(ProjetLettreMission $plm)
{
$infoCts = [];
$infosLmEc = [];
$plmEc = [];
try {
$em = $this->doctrine->getManager();
$plm = $em->getRepository(ProjetLettreMission::class)->findlastPLMForListe($plm->getIdUtilisateur()->getIdUtilisateur());
$delai = $em->getRepository(Parametre::class)->recupererParametre();
if (1 != preg_match('/^\d*$/', (string) $delai)) {
throw new \Exception("La durée de la récupération de projet de lettre de missions n'est pas définie.");
}
$delai = new \DateInterval("P{$delai}D");
if ($plm instanceof ProjetLettreMission) {
$user = $em->getRepository(UtilisateurInformation::class)->findDataForPageProfil($plm->getIdUtilisateur()->getIdUtilisateur());
if ($user) {
if ($plm instanceof ProjetLettreMission) {
$infoCts[] = ['id_cts' => $plm->getIdUtilisateur()->getIdUtilisateur(), 'nom' => $user['nom'], 'prenom' => $user['prenom'], 'rSerLibl' => $user['rSerLibl'], 'libelleAffectation' => $user['libelleAffectation'], 'libellePoste' => $user['libellePoste'], 'saisonSportive' => $user['saisonSportiveFederation']];
$lastPlm = $this->checkLastMission->getLastMission($plm->getIdUtilisateur());
$RefFopPlm = null;
if ($plm->getFonctComplementaire() != null) {
$RefFopPlm = $em->getRepository(RefFop::class)->findOneBy(['idFop' => $plm->getFonctComplementaire()]);
}
$ReflocalPlm = null;
if ($plm->getLocalisation() != null) {
$ReflocalPlm = $em->getRepository(RefAffectation::class)->findOneBy(['idAffectation' => $plm->getLocalisation()]);
}
if ($lastPlm) {
$postePlm = $em->getRepository(HistoPoste::class)->findByDatePoste($lastPlm->getDateFin(), $plm->getIdUtilisateur()->getIdUtilisateur());
$fedePlm = $em->getRepository(HistoFederation::class)->findByDateFederation($lastPlm->getDateFin(), $plm->getIdUtilisateur()->getIdUtilisateur());
$affPlm = $em->getRepository(HistoAffectation::class)->findByDateAffectation($lastPlm->getDateFin(), $plm->getIdUtilisateur()->getIdUtilisateur());
$rFede = $em->getRepository(RFederation::class)->findOneBy(['rAdmDiside' => $fedePlm->getFederation()->getRAdmDiside()]);
// Correction de la mantis 33587 sur le format de date
$infosLmEc[] = ['dateEffet' => date_format($lastPlm->getDateDebut(), "d/m/Y"), 'dateFin' => date_format($lastPlm->getDateFin(), "d/m/Y"), 'libellePoste' => $postePlm->getPoste()->getLibellePoste(), 'saisonSportive' => $fedePlm->getFederation()->getSaisonSportiveFederation(), 'Federation' => $rFede->getRSerLibl(), 'Affectation' => $affPlm ? $affPlm->getAffectation()->getLibelleLong() : '', 'libelleFop' => $lastPlm->getIdFop()->getLibelleFop(), 'idFop' => $lastPlm->getIdFop()->getIdFop(), 'saisonSportive' => $lastPlm->getSaisonSportive(), 'link' => sha1((string) $lastPlm->getIdProjetLm()), 'identifiant' => $lastPlm->getIdProjetLm()];
} else {
$infosLmEc = null;
}
if ($plm->getIdUtilisateur()->getIdRole() == 2 || $plm->getIdUtilisateur()->getIdRole() == 12 || $plm->getIdUtilisateur()->getIdRole() == 5) {
$userCts = $em->getRepository(UtilisateurInformation::class)->findOneBy(['idUtilisateur' => $plm->getIdUtilisateur()->getIdUtilisateur()]);
$subHiear = $this->getDtn($userCts->getIdFederation());
if ($subHiear) {
$haveDTN = true;
} else {
$haveDTN = false;
}
} else {
$haveDTN = false;
}
$listeDisciplineLm = $em->getRepository(RefDisciplineLm::class)->findBy(['projetLm' => $plm->getIdProjetLm()]);
$listeDiscipline = [];
foreach ($listeDisciplineLm as $data) {
if ($data instanceof RefDisciplineLm) {
$listeDiscipline[] = $data->getDiscipline()->getLibelleDiscipline();
}
}
$plmEc[] = [
'dateEffet' => date_format($plm->getDateDebut(), "d/m/Y"),
'dateFin' => $plm->getDateFin() ? date_format($plm->getDateFin(), "d/m/Y") : "",
'cadreGeneral' => ($user['idOdmCadreGeneral'] ?? null),
'texteDtn' => $plm->getContenuPrecisionDtn(),
'textSupHierarchique' => $plm->getContenuPrecisionSH(),
'adresseActivite' => $plm->getadresse_Activite(),
'selectionLocalisation' => $plm->getLocalisation(),
'libelle_selectionLocalisation' => $ReflocalPlm != null ? $ReflocalPlm->getLibelleAffectation() : "",
'version' => $plm->getVersion(),
'identifiant' => $plm->getIdProjetLm(),
'libelleFop' => $plm->getIdFop()->getLibelleFop(),
'idFop' => $plm->getIdFop()->getIdFop(),
'idFo_complementaire' => $plm->getFonctComplementaire(),
'libelleFo_complementaire' => $RefFopPlm != null ? $RefFopPlm->getLibelleFop() : "",
'idLieu' => ($plm->getLieu()) != null ? $plm->getLieu()->getIdLieu() : "",
'libelleLieu' => ($plm->getLieu()) != null ? $plm->getLieu()->getLibelleLieu() : "",
'idDiscipline' => $listeDiscipline,
'libelleWorkflow' => $plm->getIdWorkflow()->getLibelleAction(),
'idWorkflow' => $plm->getIdWorkflow()->getIdWorkflow(),
'link' => sha1($plm->getIdProjetLm()),
'haveDTN' => $haveDTN,
'recupLettre' => new \DateTime() >= $plm->getDate()->add($delai),
];
$fops = $em->getRepository(RefFop::class)->findAll();
foreach ($fops as $fop) {
if (!$fop->getDateDesactivation()) {
$libFop[] = ['idFop' => $fop->getIdFop(), 'libelleFop' => $fop->getLibelleFop()];
}
}
}
}
$repositoryRefLieu = $em->getRepository(RefLieu::class);
$libLieu = $repositoryRefLieu->findDonneesAdmin();
$repositoryRefDiscipline = $em->getRepository(RefDiscipline::class);
$libDiscipline = $repositoryRefDiscipline->findDonneesAdmin($user['idFederation']);
$data = ["infoCts" => $infoCts, "infosLmEc" => $infosLmEc, "plmEc" => $plmEc, "libellelieu" => $libLieu, "libelleDiscipline" => $libDiscipline, "fop" => $libFop];
$success = true;
} else {
$data = 'Id Plm Not Found';
$success = false;
}
} catch (\Exception $e) {
$success = false;
$data = $e->getMessage();
}
return $this->specializedJsonResponse->getJson($success, $data);
}
private function getDtn($idFederation)
{
$em = $this->doctrine->getManager();
$getIdUserForMyFede = $em->getRepository(UtilisateurInformation::class)->findMyFede($idFederation);
return $getIdUserForMyFede;
}
private function createIdentifiantPLM($user, $idUtilisateur)
{
$em = $this->doctrine->getManager();
$currentDay = new \DateTime();
$userInformation = $em->getRepository(UtilisateurInformation::class)
->findOneBy(["idUtilisateur" => $idUtilisateur]);
$matricule = $user->getPCivMatcle();
$name = $userInformation->getNom() . '_' . $userInformation->getPrenom();
$reference = is_null($matricule) ? $name : $matricule;
return $currentDay->format('Y-m-d') . '_' . $reference;
}
#[Route(path: '/api/save_plm', name: 'cts_web_insert_plm')]
public function CreatePlm(Request $request)
{
$success = null;
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
$request->request->replace(is_array($data) ? $data : []);
$repositoryRefDiscipline = $this->doctrine->getManager()->getRepository(RefDiscipline::class);
$projetLettreMission = new ProjetLettreMission();
$form = $this->createForm(\App\Form\ProjetLettreMissionType::class, $projetLettreMission);
$form->handleRequest($request);
$em = $this->doctrine->getManager();
try {
if ($form->isSubmitted() && $form->isValid()) {
$requestForm = $request->request->all();
$idUtilisateur = $requestForm['projet_lettre_mission']['idUser'];
$user = $em->getRepository(Utilisateur::class)->find($idUtilisateur);
$projetLettreMission->setIdUtilisateur($user);
$identifiantPlm = $this->createIdentifiantPLM($user, $idUtilisateur);
$projetLettreMission->setIdentifiantPlm($identifiantPlm);
if (isset($requestForm['projet_lettre_mission']['saisonSportive'])) {
$projetLettreMission->setSaisonSportive($requestForm['projet_lettre_mission']['saisonSportive']);
}
if (isset($requestForm['projet_lettre_mission']['texteDtn'])) {
$projetLettreMission->setContenuPrecisionDtn($requestForm['projet_lettre_mission']['texteDtn']);
}
if (isset($requestForm['projet_lettre_mission']['textSupHierarchique'])) {
$projetLettreMission->setContenuPrecisionSH($requestForm['projet_lettre_mission']['textSupHierarchique']);
}
if (isset($requestForm['projet_lettre_mission']['adresseActivite'])) {
$projetLettreMission->setAdresseActivite($requestForm['projet_lettre_mission']['adresseActivite']);
}
if (isset($requestForm['projet_lettre_mission']['selectionFonctComplementaire']) && isset($requestForm['projet_lettre_mission']['selectionFonctComplementaire']['idFop'])) {
$projetLettreMission->setFonctComplementaire($requestForm['projet_lettre_mission']['selectionFonctComplementaire']['idFop']);
}
if (isset($requestForm['projet_lettre_mission']['selectionLocalisation']['id'])) {
$projetLettreMission->setLocalisation($requestForm['projet_lettre_mission']['selectionLocalisation']['id']);
}
$projetLettreMission->setVersion(1);
if ($requestForm['projet_lettre_mission']['idLieu'] != null) {
$lieu = $em->getRepository(RefLieu::class)->find($requestForm['projet_lettre_mission']['idLieu']);
$projetLettreMission->setLieu($lieu);
}
$em->persist($projetLettreMission);
$lettreMission = $projetLettreMission->getIdLm();
foreach ($requestForm['projet_lettre_mission']['idDiscipline'] as $idDiscipline) {
$refDiscipline = $repositoryRefDiscipline->find($idDiscipline);
$refDisciplineLm = new RefDisciplineLm();
$refDisciplineLm->setDiscipline($refDiscipline);
$refDisciplineLm->setLettreMission($lettreMission);
$refDisciplineLm->setProjetLm($projetLettreMission);
$em->persist($refDisciplineLm);
}
$lastPlm = $this->checkLastMission->getLastMission($user->getIdUtilisateur());
if ($lastPlm && $lastPlm instanceof ProjetLettreMission) {
$this->insertDataForLastMission($lastPlm, $projetLettreMission);
$this->insertDataForLastAutreMission($lastPlm, $projetLettreMission);
}
$em->flush();
$data = ["idPlm" => $projetLettreMission->getIdProjetLm()];
$success = true;
}
} catch (\Exception $e) {
$success = false;
$data = $e->getMessage();
}
return $this->specializedJsonResponse->getJson($success, $data);
}
private function insertDataForLastMission(ProjetLettreMission $lastPlm, ProjetLettreMission $newProjetLettreMission)
{
$em = $this->doctrine->getManager();
$insert = false;
$repoRefActiviteRefSousAction = $this->doctrine->getManager()->getRepository(RefActiviteRefSousAction::class);
foreach ($lastPlm->getMission() as $mission) {
if ($mission instanceof Mission) {
$activite = $repoRefActiviteRefSousAction->findOneBy(['idActivite' => $mission->getIdActivite()->getIdActivite()]);
if ($activite) {
$sousActionRefAction = $em->getRepository(RefSousActionRefAction::class)->findOneBy(['idSousAction' => $activite->getIdSousAction()->getIdSousAction()]);
if ($sousActionRefAction) {
if ($activite->getActiviteActive() == true && $sousActionRefAction->getSousActionActive() == true) {
$newActivite = $mission->getIdActivite();
$newMission = new Mission();
$newMission->setIdProjetLm($newProjetLettreMission);
$newMission->setIdActivite($newActivite);
$newMission->setQuotiteRegionale($mission->getQuotiteRegionale());
$newMission->setQuotiteNationale($mission->getQuotiteNationale());
$em->persist($newMission);
$insert = true;
}
}
}
}
}
foreach ($lastPlm->getPlmActInd() as $plmActInd) {
if ($plmActInd instanceof PlmActiviteIndic) {
$activite = $repoRefActiviteRefSousAction->findOneBy(['idActivite' => $plmActInd->getIdActivite()->getIdActivite()]);
if ($activite) {
$sousActionRefAction = $em->getRepository(RefSousActionRefAction::class)->findOneBy(['idSousAction' => $activite->getIdSousAction()->getIdSousAction()]);
if ($sousActionRefAction) {
if ($activite->getActiviteActive() == true && $sousActionRefAction->getSousActionActive() == true) {
$newActIndi = new PlmActiviteIndic();
$newActIndi->setIdActivite($plmActInd->getIdActivite());
$newActIndi->setIdIndicateur($plmActInd->getIdIndicateur());
$newActIndi->setIdProjetLm($newProjetLettreMission);
$em->persist($newActIndi);
$insert = true;
}
}
}
}
}
foreach ($lastPlm->getPlmIndAutre() as $plmIndAutre) {
if ($plmIndAutre instanceof PlmIndicateurAutre) {
$activite = $repoRefActiviteRefSousAction->findOneBy(['idActivite' => $plmIndAutre->getIdActivite()->getIdActivite()]);
if ($activite) {
$sousActionRefAction = $em->getRepository(RefSousActionRefAction::class)->findOneBy(['idSousAction' => $activite->getIdSousAction()->getIdSousAction()]);
if ($sousActionRefAction) {
if ($activite->getActiviteActive() == true && $sousActionRefAction->getSousActionActive() == true) {
$newPlmIndiAutre = new PlmIndicateurAutre();
$newPlmIndiAutre->setIdProjetLm($newProjetLettreMission);
$newPlmIndiAutre->setIdActivite($plmIndAutre->getIdActivite());
$em->persist($newPlmIndiAutre);
$insert = true;
foreach ($plmIndAutre->getPlmActivteIndicAutre() as $plmActivteIndicAutre) {
if ($plmActivteIndicAutre instanceof PlmActiviteIndicAutre) {
$newPlmActiviteIndicAutre = new PlmActiviteIndicAutre();
$newPlmActiviteIndicAutre->setIdPlmIndAutre($newPlmIndiAutre);
$newPlmActiviteIndicAutre->setLibelleIndicateurAutre($plmActivteIndicAutre->getLibelleIndicateurAutre());
$newPlmActiviteIndicAutre->setIdActiviteIndicAutreParent($plmActivteIndicAutre->getIdActiviteIndicAutreParent());
$em->persist($newPlmActiviteIndicAutre);
$insert = true;
}
}
}
}
}
}
}
return $insert;
}
private function insertDataForLastAutreMission(ProjetLettreMission $lastPlm, ProjetLettreMission $newProjetLettreMission)
{
$em = $this->doctrine->getManager();
$insert = false;
foreach ($lastPlm->getPlmActiviteAutre() as $plmActiviteAutre) {
if ($plmActiviteAutre instanceof PlmActiviteAutre) {
if ($plmActiviteAutre->getIdSousAction()->getDateDesactivation() == null) {
$newPlmActiviteAutre = new PlmActiviteAutre();
$newPlmActiviteAutre->setIdProjetLm($newProjetLettreMission);
$newPlmActiviteAutre->setIdAction($plmActiviteAutre->getIdAction());
$newPlmActiviteAutre->setIdSousAction($plmActiviteAutre->getIdSousAction());
$newPlmActiviteAutre->setLibelleActAutre($plmActiviteAutre->getLibelleActAutre());
$newPlmActiviteAutre->setQuotiteRegAutre($plmActiviteAutre->getQuotiteRegAutre());
$newPlmActiviteAutre->setQuotiteNatAutre($plmActiviteAutre->getQuotiteNatAutre());
$em->persist($newPlmActiviteAutre);
$insert = true;
foreach ($plmActiviteAutre->getPlmActivteAutreIndicAutre() as $plmActivteAutreIndicAutre) {
if ($plmActivteAutreIndicAutre instanceof PlmActiviteAutreIndicAutre) {
$newPlmActivteAutreIndicAutre = new PlmActiviteAutreIndicAutre();
}
$newPlmActivteAutreIndicAutre->setIdActAutre($newPlmActiviteAutre);
$newPlmActivteAutreIndicAutre->setIdPlmActAutIndAutParent($plmActivteAutreIndicAutre->setIdPlmActAutIndAutParent());
$newPlmActivteAutreIndicAutre->setLibelleIndAutreActAutre($plmActivteAutreIndicAutre->getLibelleIndAutreActAutre());
$em->persist($newPlmActivteAutreIndicAutre);
$insert = true;
}
}
}
}
return $insert;
}
#[Route(path: '/api/modify_plm', name: 'cts_web_update_plm')]
public function editPlm(Request $request)
{
try {
$referer = strpos((string) $request->server->getHeaders()["REFERER"], "modifier");
$refererTableMission = strpos((string) $request->server->getHeaders()["REFERER"], "tableau-des-missions");
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
$request->request->replace(is_array($data) ? $data : []);
$params = $request->request->all();
$accessRuleService = $this->accessRule;
$accessRuleService->readerFirewall();
$em = $this->doctrine->getManager();
$projetLettreMission = $em->getRepository(ProjetLettreMission::class)->find($params['projet_lettre_mission']['idPlm']);
$lmUtilisateur = $em->getRepository(LettreMission::class)->find($projetLettreMission->getIdLm())->getIdUtilisateur()->getIdUtilisateur();
$lmUtilisateurInformation = $em->getRepository(UtilisateurInformation::class)->findOneBy(["idUtilisateur" => $lmUtilisateur]);
$affectationLmUtilisateur = (null !== $lmUtilisateurInformation) ? $lmUtilisateurInformation->getIdAffectation()->getIdAffectation() : 0;
// CPO : Correction bug perte lieu #1
$lastIdWorkflow = $projetLettreMission->getIdWorkflow()->getIdWorkflow();
$lieu = $projetLettreMission->getLieu();
$foprinciId = $params["projet_lettre_mission"]['idFop'];
if (isset($params["projet_lettre_mission"]['selectionFonctComplementaire']) && isset($params["projet_lettre_mission"]['selectionFonctComplementaire']['idFop'])) {
$fopcompId = $params["projet_lettre_mission"]['selectionFonctComplementaire']['idFop'];
} else {
$fopcompId = false;
}
$fopcomp = $em->getRepository(RefFop::class)->findOneBy(["idFop" => $fopcompId]);
$foprinci = $em->getRepository(RefFop::class)->findOneBy(["idFop" => $foprinciId]);
$editForm = $this->createForm(\App\Form\ProjetLettreMissionType::class, $projetLettreMission);
$editForm->handleRequest($request);
// CPO : Correction bug perte lieu #2
$projetLettreMission->setLieu($lieu);
$newIdWorkFlow = $params['projet_lettre_mission']['idWorkflow'];
$quickAction = $params['projet_lettre_mission']['quickAction'] ?? false;
// Vérification Quotité et affectation nationale pour rédaction par DS
if (
$newIdWorkFlow != $lastIdWorkflow &&
($newIdWorkFlow == Workflow::LM_ATTENTE_SIG)
) {
$checkMission = $this->missionCheck->synthese($projetLettreMission->getIdProjetLm());
if ($checkMission['totauxPlm'] != 100) {
return $this->specializedJsonResponse->getJson(false, $checkMission);
}
} elseif (
($referer != false || $refererTableMission != false)
&& $newIdWorkFlow != $lastIdWorkflow
&& (($newIdWorkFlow == Workflow::LM_MODIF_DTN && $lastIdWorkflow != Workflow::LM_MODIF_SUP && $lastIdWorkflow != Workflow::LM_REDACTION_DS)
|| $newIdWorkFlow == Workflow::LM_MODIF_SUP)
) {
$checkMission = $this->missionCheck->synthese($projetLettreMission->getIdProjetLm());
if ($checkMission && $checkMission['totauxPlm'] != 100) {
$checkMission = "Les quotités correspondant à cette mission doivent être égale à 100% pour choisir ce statut";
return $this->specializedJsonResponse->getJson(false, $checkMission);
}
} elseif (($newIdWorkFlow != $lastIdWorkflow) && ($newIdWorkFlow == Workflow::LM_REDACTION_DS && $affectationLmUtilisateur != 1)) {
$checkMission = "L'affectation de l'utilisateur doit être nationale pour permettre ce changement d'état";
return $this->specializedJsonResponse->getJson(false, $checkMission);
}
// Signature LM
// var_dump($newIdWorkFlow);
// die();
if ($newIdWorkFlow == Workflow::LM_SIGNEE && $newIdWorkFlow != $lastIdWorkflow) {
$checkMission = $this->missionCheck->synthese($projetLettreMission->getIdProjetLm());
if ($checkMission['totauxPlm'] != 100) {
return $this->specializedJsonResponse->getJson(false, $checkMission);
}
try {
$today = new \DateTime();
$workflow = $em->getRepository(Workflow::class)->find(Workflow::LM_SIGNEE);
$idSignataire = $this->getUser()->getUtilisateur()->getIdUtilisateur();
//$signataire = $em->getRepository(Utilisateur::class)->find($idSignataire);
$lm = $em->getRepository(LettreMission::class)->find($projetLettreMission->getIdLm()->getIdLm());
$affectation = $em->getRepository(UtilisateurInformation::class)->findOneByIdUtilisateur($lmUtilisateur)->getIdAffectation()->getIdAffectation();
if ($affectation != 1) {
$drsignataire = $em->getRepository(UtilisateurInformation::class)->findDrSuperieur($affectation);
} else {
$drsignataire = $em->getRepository(UtilisateurInformation::class)->findDsSuperieur($affectation);
}
//$signataire = $em->getRepository(UtilisateurInformation::class)->findOneByIdUtilisateur($drsignataire);
$signataire = $em->getRepository(Utilisateur::class)->find($drsignataire);
$projetLettreMission->setIdWorkflow($workflow);
$lm->setDateDeSignature($today);
$lm->setSignataire($signataire);
$em->persist($lm);
$em->flush();
$lmUtilisateurInformation->setIdFoprinci($foprinci);
$lmUtilisateurInformation->setIdFop($fopcomp);
$lmUtilisateurInformation->setIdLieu($lieu);
// notification
$idUtilisateur = $projetLettreMission->getIdUtilisateur();
$email = $em->getRepository(Utilisateur::class)->findCourrielById($idUtilisateur)[0]['courriel'];
$mail = $this->emailSHDecision->getMail(
EmailSHDecision::SIGNED,
EmailSHDecision::LM,
$email
);
if ($mail) {
$this->mailerInterface->send($mail);
}
$em->persist($lmUtilisateurInformation);
$em->flush();
$this->generateLmPdf->generatePdf($projetLettreMission, false, $signataire);
$data = 'Le changement de statut a été effectué avec succès';
$success = true;
} catch (\Exception $e) {
$success = false;
$data = 'Une erreur se produit lors du changement de statut. Veuillez réessayer utérieurement'. $e->getMessage();
}
} else {
$idPlm = $this->persistAndClone($projetLettreMission, $params, $quickAction);
$data = $quickAction ? 'Le changement de statut a été effectué avec succès' : $idPlm;
$success = true;
}
$em->flush();
//Envoi de mail au supérieur
if (($newIdWorkFlow == Workflow::LM_MODIF_DTN) && ($newIdWorkFlow != $lastIdWorkflow)) {
$this->sendMailNotification();
}
} catch (\Exception $e) {
$success = false;
$data = $e->getMessage();
}
// var_dump( $this->specializedJsonResponse->getJson($success, $data) );
// die();
return $this->specializedJsonResponse->getJson($success, $data);
}
private function persistAndClone(ProjetLettreMission $projetLettreMission, $params, $quickAction = false)
{
$em = $this->doctrine->getManager();
$lastWorkFlow = $projetLettreMission->getIdWorkflow()->getIdWorkflow();
if ($lastWorkFlow != $params['projet_lettre_mission']['idWorkflow']) {
//Clonnage de l'ancien plm
$newPlm = $this->cloneLastPlm->clonePlm($params, $projetLettreMission);
if (($params['projet_lettre_mission']['idLieu'] != null) && !$quickAction) {
if ($newPlm instanceof ProjetLettreMission) {
$refLieu = $em->getRepository(RefLieu::class)->find($params['projet_lettre_mission']['idLieu']);
$newPlm->setlieu($refLieu);
}
}
if (isset($params['projet_lettre_mission']['saisonSportive'])) {
$newPlm->setSaisonSportive($params['projet_lettre_mission']['saisonSportive']);
}
if (isset($params['projet_lettre_mission']['texteDtn'])) {
$newPlm->setContenuPrecisionDtn($params['projet_lettre_mission']['texteDtn']);
}
if (isset($params['projet_lettre_mission']['textSupHierarchique'])) {
$newPlm->setContenuPrecisionSH($params['projet_lettre_mission']['textSupHierarchique']);
}
if (isset($params['projet_lettre_mission']['adresseActivite'])) {
$newPlm->setAdresseActivite($params['projet_lettre_mission']['adresseActivite']);
}
if (isset($params['projet_lettre_mission']['selectionFonctComplementaire']['idFop'])) {
$newPlm->setFonctComplementaire($params['projet_lettre_mission']['selectionFonctComplementaire']['idFop']);
}
if (isset($params['projet_lettre_mission']['selectionLocalisation']['id'])) {
$newPlm->setLocalisation($params['projet_lettre_mission']['selectionLocalisation']['id']);
}
$em->persist($newPlm);
$this->insertDataForLastMission($projetLettreMission, $newPlm);
$this->insertDataForLastAutreMission($projetLettreMission, $newPlm);
$idPlm = $newPlm->getIdProjetLm();
$lettreMission = $projetLettreMission->getIdLm();
if ($lettreMission instanceof LettreMission) {
if ($params['projet_lettre_mission']['idDiscipline'] != null) {
foreach ($params['projet_lettre_mission']['idDiscipline'] as $idDiscipline) {
$refDiscipline = $em->getRepository(RefDiscipline::class)->find($idDiscipline);
$refDisciplineLm = new RefDisciplineLm();
$refDisciplineLm->setDiscipline($refDiscipline);
$refDisciplineLm->setLettreMission($lettreMission);
$refDisciplineLm->setProjetLm($newPlm);
$em->persist($refDisciplineLm);
}
//Duplication des anciennes disciplines
} else if ($quickAction) {
$listeDisciplineLm = $em->getRepository(RefDisciplineLm::class)->findBy(['projetLm' => $projetLettreMission->getIdProjetLm()]);
foreach ($listeDisciplineLm as $data) {
if ($data instanceof RefDisciplineLm) {
$refDiscipline = $data->getDiscipline();
$refDisciplineLm = new RefDisciplineLm();
$refDisciplineLm->setDiscipline($refDiscipline);
$refDisciplineLm->setLettreMission($lettreMission);
$refDisciplineLm->setProjetLm($newPlm);
$em->persist($refDisciplineLm);
}
}
}
}
} else {
if ($params['projet_lettre_mission']['idLieu'] != null) {
if ($projetLettreMission instanceof ProjetLettreMission) {
$refLieu = $em->getRepository(RefLieu::class)->find($params['projet_lettre_mission']['idLieu']);
$projetLettreMission->setlieu($refLieu);
}
}
$em->getRepository(RefDisciplineLm::class)->deleteDisciplineByPlm($projetLettreMission->getIdProjetLm());
$lettreMission = $projetLettreMission->getIdLm();
if ($lettreMission instanceof LettreMission) {
foreach ($params['projet_lettre_mission']['idDiscipline'] as $idDiscipline) {
$refDiscipline = $em->getRepository(RefDiscipline::class)->find($idDiscipline);
$refDisciplineLm = new RefDisciplineLm();
$refDisciplineLm->setDiscipline($refDiscipline);
$refDisciplineLm->setLettreMission($lettreMission);
$refDisciplineLm->setProjetLm($projetLettreMission);
$em->persist($refDisciplineLm);
}
}
if (isset($params['projet_lettre_mission']['saisonSportive'])) {
$projetLettreMission->setSaisonSportive($params['projet_lettre_mission']['saisonSportive']);
}
if (isset($params['projet_lettre_mission']['texteDtn'])) {
$projetLettreMission->setContenuPrecisionDtn($params['projet_lettre_mission']['texteDtn']);
}
if (isset($params['projet_lettre_mission']['textSupHierarchique'])) {
$projetLettreMission->setContenuPrecisionSH($params['projet_lettre_mission']['textSupHierarchique']);
}
if (isset($params['projet_lettre_mission']['adresseActivite'])) {
$projetLettreMission->setAdresseActivite($params['projet_lettre_mission']['adresseActivite']);
}
if (isset($params['projet_lettre_mission']['selectionFonctComplementaire']['idFop'])) {
$projetLettreMission->setFonctComplementaire($params['projet_lettre_mission']['selectionFonctComplementaire']['idFop']);
}
if (isset($params['projet_lettre_mission']['selectionLocalisation']['id'])) {
$projetLettreMission->setLocalisation($params['projet_lettre_mission']['selectionLocalisation']['id']);
}
$em->persist($projetLettreMission);
$idPlm = $projetLettreMission->getIdProjetLm();
}
return $idPlm;
}
private function persistAndCloneSignature(ProjetLettreMission $projetLettreMission, $params)
{
$em = $this->doctrine->getManager();
$lastWorkFlow = $projetLettreMission->getIdWorkflow()->getIdWorkflow();
if ($lastWorkFlow != $params['idWorkflow']) {
$newPlm = $this->cloneLastPlm->clonePlmEtapePrecedente($params, $projetLettreMission);
$em->persist($newPlm);
$this->insertDataForLastMission($projetLettreMission, $newPlm);
$this->insertDataForLastAutreMission($projetLettreMission, $newPlm);
$idPlm = $newPlm->getIdProjetLm();
} else {
$em->persist($projetLettreMission);
$idPlm = $projetLettreMission->getIdProjetLm();
}
return $idPlm;
}
#[Route(path: '/api/testSQL', name: 'cts_web_test_plm')]
public function testSqlPlm()
{
$idPlmSource = 20908;
$idPlmComparer = 21763;
/** cas 1 */
$idPlmSource = 498;
$idPlmComparer = 19692;
$idLm = 279;
/** cas 1 */
/** cas 2 */
$idPlmSource = 17;
$idPlmComparer = 327;
$idLm = 16;
/** cas 2 */
/** cas 3 */
// $idPlmSource = 12646; // version 6
$idPlmSource = 2051; // version 1
// $idPlmSource = 3202; // version 2
// $idPlmSource = 5904; // version 3
// $idPlmSource = 11306; // version 4
// $idPlmSource = 12634; // version 4
// $idPlmSource = 12646; // version 5
// $idPlmComparer = 16078; // version 7
// $idPlmSource = 2051; // version 7
$idPlmComparer = 16078; // version 1
// $idPlmComparer = 2051;
// $idPlmSource = 16078;
$idLm = 741;
/** cas 3 */
// $resultat = $this->missionCheck->syntheseComparaison($idPlmSource,$idPlmComparer);
// $resultat = $this->missionCheck->getContenuPlm(18052);
// $resultat = $this->missionCheck->getContenuPlm(21763);
$resultat = $this->missionCheck->comparaisonEntrePlm($idPlmSource, $idPlmComparer, $idLm);
}
#[Route(path: '/api/getMissionPlm', name: 'cts_web_mission_plm')]
public function getContenuPlm(Request $request)
{
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
$request->request->replace(is_array($data) ? $data : []);
$params = $request->request->all();
try {
$contenuPlm = $this->missionCheck->getContenuPlm($params['idPlm']);
$synthese = $this->missionCheck->synthese($params['idPlm']);
$infoCts = $this->missionCheck->infoUserPlm($params['idPlm']);
$listeActiviteRef = $this->missionCheck->getListeActivite($infoCts['infoCts']['idFederation'], $infoCts['infoCts']['idAffectation']);
$data = ['contenuPlm' => $contenuPlm, 'synthese' => $synthese, 'link' => sha1((string) $params['idPlm']), 'infoCts' => $infoCts, 'listeActivite' => $listeActiviteRef];
$success = true;
} catch (\Exception) {
$success = false;
$data = "Erreur de chargement";
}
return $this->specializedJsonResponse->getJson($success, $data);
}
#[Route(path: '/api/suppression_activite', name: 'cts_web_mission_suppression_activite')]
public function supprimerActivite(Request $request)
{
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
$request->request->replace(is_array($data) ? $data : []);
$params = $request->request->all();
$accessRuleService = $this->accessRule;
$isReader = $accessRuleService->isReader();
$suppressionActivite = $isReader ? false : $this->missionCheck->supprimerActivite($params);
if ($suppressionActivite) {
$success = true;
$synthese = $this->missionCheck->synthese($params['idPlm']);
$contenuPlm = $this->missionCheck->getContenuPlm($params['idPlm']);
$data = ['contenuPlm' => $contenuPlm, 'synthese' => $synthese];
} else {
$success = false;
$data = "Erreur de suppression !";
}
return $this->specializedJsonResponse->getJson($success, $data);
}
#[Route(path: '/api/ajout_activite', name: 'cts_web_mission_ajout_activite')]
public function ajouterActivite(Request $request)
{
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
$request->request->replace(is_array($data) ? $data : []);
$params = $request->request->all();
$accessRuleService = $this->accessRule;
$isReader = $accessRuleService->isReader();
$ajoutActivites = $isReader ? false : $this->missionCheck->ajoutActivite($params);
if ($ajoutActivites) {
$success = true;
$contenuPlm = $this->missionCheck->getContenuPlm($params['idPlm']);
$synthese = $this->missionCheck->synthese($params['idPlm']);
$data = ['contenuPlm' => $contenuPlm, 'synthese' => $synthese];
} else {
$success = false;
$data = "Erreur de suppression !";
}
return $this->specializedJsonResponse->getJson($success, $data);
}
/**
*
* @return JsonResponse
*/
public function getDonneesComparePlmAction(Request $request)
{
$listVersionsSource = [];
$listVersionsAComparer = [];
$repositoryPLM = $this->doctrine->getManager()->getRepository(ProjetLettreMission::class);
$repositoryUi = $this->doctrine->getManager()->getRepository(UtilisateurInformation::class);
$repositoryLM = $this->doctrine->getManager()->getRepository(LettreMission::class);
$repositoryRA = $this->doctrine->getManager()->getRepository(RefAction::class);
$listPlm = [];
$idUtilisateur = $request->attributes->get('idPlm');
try {
$infoUser = $repositoryUi->findDataForPageProfil($idUtilisateur);
$dataInfoPlm = $repositoryPLM->findProjetLettreMission($idUtilisateur);
$lm = $repositoryLM->find($dataInfoPlm['idLm']);
$versionSource = [];
$versionAComparer = [];
$versionId = [];
if ($lm instanceof LettreMission) {
foreach ($lm->getPlm() as $key => $plm) {
if ($plm instanceof ProjetLettreMission) {
$listVersionsSource[$key] = $listVersionsAComparer[$key] = $plm->getVersion();
if ($dataInfoPlm['version'] == $plm->getVersion()) {
$enCours = $plm->getVersion() . " (En cours)";
} else {
$enCours = $plm->getVersion();
}
$versionSource[] = ["id" => $plm->getIdProjetLm(), "version" => $enCours, "selected" => ($dataInfoPlm['version'] == $plm->getVersion() ? 'true' : 'false')];
$versionAComparer[] = ["id" => $plm->getIdProjetLm(), "version" => $enCours, "selected" => ($dataInfoPlm['version'] - 1 == $plm->getVersion() ? 'true' : 'false')];
$versionId[$plm->getIdProjetLm()] = $plm->getVersion();
}
$plmActionsActivites[$plm->getIdProjetLm()] = $this->get("ctsweb_mission_service")->getContenuPlm($plm->getIdProjetLm());
}
array_multisort($listVersionsSource, SORT_ASC, $versionSource);
array_multisort($listVersionsAComparer, SORT_ASC, $versionAComparer);
}
$synthese = [];
foreach ($repositoryRA->findAll() as $action) {
$synthese[$action->getIdAction()] = ["idAction" => $action->getIdAction(), "libelleAction" => $action->getLibelleActionLong()];
}
foreach ($plmActionsActivites as $idPlm => $plm) {
$listPlm[] = $idPlm;
foreach ($synthese as $idAction => &$reste) {
$reste[$idPlm] = ["regional" => 0, "national" => 0];
}
foreach ($plm as $libAction => $actions) {
foreach ($actions as $act) {
if (isset($act['action'])) {
$synthese[$act['action']][$idPlm]["regional"] += $act['quo_reg'];
$synthese[$act['action']][$idPlm]["national"] += $act['quo_nat'];
}
}
}
}
$data = ["infoCts" => $infoUser, "infosLmEc" => $dataInfoPlm, "versionSource" => $versionSource, "versionAComparer" => $versionAComparer, "versionId" => $versionId, "synthese" => $synthese, "comparaison" => ''];
$return = ["success" => true, "data" => $data];
} catch (Exception $e) {
$return = ["success" => false, "data" => $e->getMessage()];
}
return new JsonResponse($return);
}
public function compareTable($listPlm, $idLm)
{
$repositoryRA = $this->doctrine->getManager()->getRepository(RefAction::class);
$repositoryRSARA = $this->doctrine->getManager()->getRepository(RefSousActionRefAction::class);
$repositoryPLM = $this->doctrine->getManager()->getRepository(ProjetLettreMission::class);
$listeIndicateurAutre = $repositoryPLM->getIndicateurAutreActiviteListPlm($listPlm);
$listeActiviteReferentiel = $repositoryPLM->getActiviteIndicateurReferentielListPlm($listPlm);
$listeActiviteAutre = $repositoryPLM->getIndicateurAutreActiviteAutreListPlm($listPlm);
$synthese = [];
$indicateurSortis = [];
$activiteAutreSortis = [];
$activitePere = '';
// Boucle sur les actions
foreach ($repositoryRA->findBy([], ['idAction' => 'ASC']) as $action) {
// Ajout des actions dans le tableau
$synthese[$action->getIdAction()] = ["idAction" => $action->getIdAction(), "libelleAction" => $action->getLibelleActionLong(), "sousAction" => []];
$sousActionList = $repositoryRSARA->getSousActionsByAction($action->getIdAction());
// Boucle sur les sous actions
foreach ($sousActionList as $sousAction) {
// Si l'action est la bonne
if ($action->getIdAction() == $sousAction['idAction']) {
// Ajout des sous actions dans le tableau
$synthese[$action->getIdAction()]["sousAction"][$sousAction['idSousAction']] = ["libelleSousAction" => $sousAction['libelleSousActionLong'], "activite" => []];
// Boucle sur les activités du référentiel
foreach ($listeActiviteReferentiel as $activite) {
$activiteAjout = $repositoryPLM->getActivitePlmVersionAjout($idLm, $activite['id_activite']);
$activiteSuppr = $repositoryPLM->getActivitePlmVersionSuppression($idLm, $activite['id_activite']);
$indicateurAjout = $repositoryPLM->getIndicateurPlmVersionAjout($activite['id_indicateur'], $idLm, $activite['id_activite']);
$indicateurSuppr = $repositoryPLM->getIndicateurPlmVersionSuppression($activite['id_indicateur'], $idLm, $activite['id_activite']);
if ($action->getIdAction() == $activite['id_action']) {
if ($sousAction['idSousAction'] == $activite['id_sous_action'] && $action->getIdAction() == $activite['id_action']) {
// Ajout des activités dans le tableau
$synthese[$action->getIdAction()]["sousAction"][$activite['id_sous_action']]['activite'][$activite['id_activite']] = ["libelleActivite" => $activite["libelle_activite"], "indicateur" => [], "plm" => [], "versionAjout" => $activiteAjout['version_ajout'], "ajout" => "Ajouté à la version $activiteAjout[version_ajout]", "versionSuppr" => ($activiteSuppr['version_suppr'] + 1), "suppr" => "Supprimé à la version " . ($activiteSuppr['version_suppr'] + 1) . ""];
}
// Ajout des quotités dans le tableau sur chaque version du plm
if (!isset($synthese[$action->getIdAction()]["sousAction"][$activite['id_sous_action']]['activite'][$activite['id_activite']]['plm'][$activite['id_projet_lm']])) {
$synthese[$action->getIdAction()]["sousAction"][$activite['id_sous_action']]['activite'][$activite['id_activite']]['plm'][$activite['id_projet_lm']] = ["quo_reg" => $activite["quo_reg"], "quo_nat" => $activite["quo_nat"]];
}
// Ajout du libelle des indicateurs dans le tableau
if (!isset($synthese[$action->getIdAction()]["sousAction"][$activite['id_sous_action']]['activite'][$activite['id_activite']]['indicateur'][$activite['id_indicateur']])) {
$synthese[$action->getIdAction()]["sousAction"][$activite['id_sous_action']]['activite'][$activite['id_activite']]['indicateur'][$activite['id_indicateur']] = ["libelleIndicateur" => $activite["lib_indicateur"], "versionAjout" => $indicateurAjout, "versionSuppr" => $indicateurSuppr];
}
// Ajout des indicateurs hors référetiel dans le tableau
foreach ($listeIndicateurAutre as $activiteAutre) {
if (isset($synthese[$action->getIdAction()]["sousAction"][$activite['id_sous_action']]['activite'][$activiteAutre['id_activite']]) && !isset($synthese[$action->getIdAction()]["sousAction"][$activite['id_sous_action']]['activite'][$activiteAutre['id_activite']]['indicateur'][$activiteAutre['id_plm_act_ind_autre']])) {
if (!isset($synthese[$action->getIdAction()]["sousAction"][$activite['id_sous_action']]['activite'][$activiteAutre['id_activite']]['indicateur'][$activiteAutre['id_parent']]) && !isset($indicateurSortis[$activiteAutre['id_parent']])) {
$synthese[$action->getIdAction()]["sousAction"][$activite['id_sous_action']]['activite'][$activiteAutre['id_activite']]['indicateur'][$activiteAutre['id_plm_act_ind_autre']] = ["libelleIndicateur" => $activiteAutre["libelle_indicateur_autre"]];
}
} else {
$indicateurSortis[$activiteAutre['id_plm_act_ind_autre']] = $activiteAutre["libelle_indicateur_autre"];
}
}
}
unset($activiteAjout);
unset($activiteSuppr);
}
// Boucle sur les activités hors référentiel
foreach ($listeActiviteAutre as $activite) {
if ($action->getIdAction() == $activite['id_action']) {
if ($sousAction['idSousAction'] == $activite['id_sous_action'] && $action->getIdAction() == $activite['id_action']) {
if (!isset($synthese[$action->getIdAction()]["sousAction"][$activite['id_sous_action']]['activite'][$activite['id_parent']])) {
$activitePere = $activite['id_activite'];
$synthese[$action->getIdAction()]["sousAction"][$activite['id_sous_action']]['activite'][$activite['id_activite']] = ["libelleActivite" => $activite["libelle_activite"], "indicateur" => [], "plm" => []];
} else {
$activiteAutreSortis[$activitePere][] = $activite["id_activite"];
}
}
// Ajout des quotités dans le tableau sur chaque version du plm
if (!isset($synthese[$action->getIdAction()]["sousAction"][$activite['id_sous_action']]['activite'][$activite['id_activite']]['plm'][$activite['id_projet_lm']])) {
if (isset($activiteAutreSortis[$activitePere])) {
$synthese[$action->getIdAction()]["sousAction"][$activite['id_sous_action']]['activite'][$activitePere]['plm'][$activite['id_projet_lm']] = ["quo_reg" => $activite["quo_reg"], "quo_nat" => $activite["quo_nat"]];
} else {
$synthese[$action->getIdAction()]["sousAction"][$activite['id_sous_action']]['activite'][$activite['id_activite']]['plm'][$activite['id_projet_lm']] = ["quo_reg" => $activite["quo_reg"], "quo_nat" => $activite["quo_nat"]];
}
}
// Ajout du libelle des indicateurs dans le tableau
if (!isset($synthese[$action->getIdAction()]["sousAction"][$activite['id_sous_action']]['activite'][$activite['id_activite']]['indicateur'][$activite['id_indicateur']])) {
$synthese[$action->getIdAction()]["sousAction"][$activite['id_sous_action']]['activite'][$activite['id_activite']]['indicateur'][$activite['id_indicateur']] = ["libelleIndicateur" => $activite["libelle_indicateur"]];
}
// Ajout des indicateurs hors référentiel dans le tableau
foreach ($listeIndicateurAutre as $activiteAutre) {
if (isset($synthese[$action->getIdAction()]["sousAction"][$activite['id_sous_action']]['activite'][$activiteAutre['id_activite']]) && !isset($synthese[$action->getIdAction()]["sousAction"][$activite['id_sous_action']]['activite'][$activiteAutre['id_activite']]['indicateur'][$activiteAutre['id_plm_act_ind_autre']])) {
if (!isset($synthese[$action->getIdAction()]["sousAction"][$activite['id_sous_action']]['activite'][$activiteAutre['id_activite']]['indicateur'][$activiteAutre['id_parent']]) && !isset($indicateurSortis[$activiteAutre['id_parent']])) {
$synthese[$action->getIdAction()]["sousAction"][$activite['id_sous_action']]['activite'][$activiteAutre['id_activite']]['indicateur'][$activiteAutre['id_plm_act_ind_autre']] = ["libelleIndicateur" => $activiteAutre["libelle_indicateur_autre"]];
}
} else {
$indicateurSortis[$activiteAutre['id_plm_act_ind_autre']] = $activiteAutre["libelle_indicateur_autre"];
}
}
}
}
// Suppression des sous actions sans activités pour la PLM
if (empty($synthese[$action->getIdAction()]["sousAction"][$sousAction['idSousAction']]['activite'])) {
unset($synthese[$action->getIdAction()]["sousAction"][$sousAction['idSousAction']]);
}
}
}
}
return $synthese;
}
#[Route(path: '/api/update_quotite', name: 'cts_web_mission_update_quotite')]
public function updateQuotite(Request $request)
{
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
$request->request->replace(is_array($data) ? $data : []);
$params = $request->request->all();
$accessRuleService = $this->accessRule;
$isReader = $accessRuleService->isReader();
$updateQuotite = $isReader ? false : $this->missionCheck->updateQuotite($params);
if ($updateQuotite) {
$success = true;
$synthese = $this->missionCheck->synthese($params['idPlm']);
$data = ['synthese' => $synthese];
} else {
$success = false;
$data = "Erreur lors de la mise à jour des quotités !";
}
return $this->specializedJsonResponse->getJson($success, $data);
}
#[Route(path: '/api/raz_activite', name: 'cts_web_mission_raz_activite')]
public function razActivite(Request $request)
{
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
$request->request->replace(is_array($data) ? $data : []);
$params = $request->request->all();
$raz = $this->missionCheck->razActivites($params);
if ($raz) {
$success = true;
$synthese = $this->missionCheck->synthese($params['idPlm']);
$contenuPlm = $this->missionCheck->getContenuPlm($params['idPlm']);
$data = ['contenuPlm' => $contenuPlm, 'synthese' => $synthese];
} else {
$success = false;
$data = "Erreur lors du RAZ !";
}
return $this->specializedJsonResponse->getJson($success, $data);
}
#[Route(path: '/api/enregistrer_act_par_lot', name: 'cts_web_act_par_lot_enregistrer')]
public function enregistrerParLot(Request $request)
{
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
$request->request->replace(is_array($data) ? $data : []);
$params = $request->request->all();
$listeUserNewPlm = $this->ajoutActiviteParLotParUser($params['listeUser']);
if (isset($params['listePlm'])) {
$listePlm = $params['listePlm'];
} else {
$listePlm = [];
}
$params['listePlm'] = array_merge($listePlm, $listeUserNewPlm);
$success = $this->missionCheck->enregistrementActiviteParLot($params);
if ($success) {
$data = "Enregistrement réussi !";
} else {
$data = "Erreur das l'enregistrement !";
}
return $this->specializedJsonResponse->getJson($success, $data);
}
/**
*
* @param type $listeIdUser
* @return type
*/
private function ajoutActiviteParLotParUser($listeIdUser)
{
$em = $this->doctrine->getManager();
$listePlmNew = [];
$dateCourante = new \DateTime();
$user = $this->getUser()->getUtilisateur()->getIdRole();
switch ($user) {
case 1:
case 3:
case 10:
$idWorkflow = 14;
break;
case 5:
case 8:
$idWorkflow = 2;
break;
}
foreach ($listeIdUser as $idUser) {
$lastPlm = $this->checkLastMission->getLastMission($idUser);
$fromOldPlm = false;
if ($lastPlm) {
$dateChangement = $lastPlm->getIdLm()->getDateChangementAdministratif();
$fromOldPlm = $dateChangement ? $dateChangement > $dateCourante : true;
}
if ($fromOldPlm) {
$idFop = $lastPlm->getIdFop()->getIdFop();
$texteDtn = $lastPlm->getContenuPrecisionDtn();
$textSupHierarchique = $lastPlm->getContenuPrecisionSH();
$lieu = $lastPlm->getLieu();
$discipline = $lastPlm->getDiscipline();
$params = [];
$params['projet_lettre_mission']['dateDebut'] = $dateCourante->format("Y/m/d");
$params['projet_lettre_mission']['dateFin'] = null;
$params['projet_lettre_mission']['idWorkflow'] = $idWorkflow;
$params['projet_lettre_mission']['idFop'] = $idFop;
$params['projet_lettre_mission']['texteDtn'] = $texteDtn;
$params['projet_lettre_mission']['textSupHierarchique'] = $textSupHierarchique;
$params['projet_lettre_mission']['idLieu'] = $lieu;
$params['projet_lettre_mission']['idDiscipline'] = $discipline;
$idPlm = $this->persistAndClone($lastPlm, $params);
$listePlmNew[] = $idPlm;
$em->flush();
} else {
$projetLettreMission = new ProjetLettreMission();
$user = $em->getRepository(Utilisateur::class)->find($idUser);
$projetLettreMission->setIdUtilisateur($user);
$identifiantPlm = $this->createIdentifiantPLM($user, $idUser);
$fop = $em->getRepository(RefFop::class)->find(4);
$workflow = $em->getRepository(Workflow::class)->find($idWorkflow);
$projetLettreMission->setIdentifiantPlm($identifiantPlm);
$projetLettreMission->setDateDebut($dateCourante);
$projetLettreMission->setDateFin(null);
$projetLettreMission->setIdFop($fop);
$projetLettreMission->setSaisonSportive(1);
$projetLettreMission->setVersion(1);
$projetLettreMission->setDroitCts(1);
$projetLettreMission->setDate($dateCourante);
$projetLettreMission->setIdWorkflow($workflow);
$em->persist($projetLettreMission);
$lm = new LettreMission();
$lm->setDateFin(null);
$lm->setDateDebut($dateCourante);
$lm->setIdUtilisateur($user);
$lm->setIdOlympiade(1);
$lm->setIdFop($fop);
$em->persist($lm);
$projetLettreMission->setIdLm($lm);
$em->flush();
$listePlmNew[] = $projetLettreMission->getIdProjetLm();
}
}
return $listePlmNew;
}
#[Route(path: '/api/supprimer_act_par_lot', name: 'cts_web_act_par_lot_supprimer')]
public function suppressionActiviteParLot(Request $request)
{
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
$request->request->replace(is_array($data) ? $data : []);
$params = $request->request->all();
$contenuApresSuppression = $this->missionCheck->suppressionActiviteParlot($params);
return $this->specializedJsonResponse->getJson(true, $contenuApresSuppression);
}
#[Route(path: '/api/ajout_act_par_lot', name: 'cts_web_act_par_lot_ajouter')]
public function ajoutActiviteParLot(Request $request)
{
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
$request->request->replace(is_array($data) ? $data : []);
$params = $request->request->all();
$contenuApresAjout = $this->missionCheck->ajoutActiviteParLot($params);
return $this->specializedJsonResponse->getJson(true, $contenuApresAjout);
}
#[Route(path: '/api/init_act_par_lot', name: 'cts_web_act_par_lot_init')]
public function initialisationActviteParLot(Request $request)
{
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
$request->request->replace(is_array($data) ? $data : []);
$params = $request->request->all();
$federation = $this->getUser()->getIdFederation();
$affectation = $this->getUser()->getIdAffectation();
$idFederation = is_null($federation) ? null : $federation->getIdFederation();
$listeActiviteRef = $this->missionCheck->getListeActivite($idFederation, $affectation->getIdAffectation());
$initActParLot = $this->missionCheck->initActiviteParLot();
$data = ['contenuPlm' => $initActParLot, 'listeActivite' => $listeActiviteRef];
return $this->specializedJsonResponse->getJson(true, $data);
}
#[Route(path: '/api/init_indicateur', name: 'cts_web_mission_indicateur_init')]
public function initIndicateur(Request $request)
{
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
$request->request->replace(is_array($data) ? $data : []);
$params = $request->request->all();
$listeIndicateur = $this->missionCheck->initListeIndicateur($params);
return $this->specializedJsonResponse->getJson(true, $listeIndicateur);
}
#[Route(path: '/api/ajout_indicateur', name: 'cts_web_mission_ajout_indicateur')]
public function gestionIndicateur(Request $request)
{
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
$request->request->replace(is_array($data) ? $data : []);
$params = $request->request->all();
$gestionIndicateur = $this->missionCheck->gestionListeIndicateurs($params);
if ($gestionIndicateur) {
$success = true;
$contenuPlm = $this->missionCheck->getContenuPlm($params['idPlm']);
$data = ['contenuPlm' => $contenuPlm];
} else {
$success = false;
$data = "Erreur durant l'enregistrement !";
}
return $this->specializedJsonResponse->getJson($success, $data);
}
public function getListePlmAction()
{
$params = [];
$role = $this->getUser()->getUtilisateur()->getIdRole();
$idFederation = "";
$idAffectation = "";
if ($role == 5) {
$idFederation = $this->getUser()->getIdFederation()->getIdFederation();
$idAffectation = $this->getUser()->getIdAffectation()->getIdAffectation();
}
if ($role == 8) {
$idFederation = $this->getUser()->getIdFederation()->getIdFederation();
}
if ($role == 10 || $role == 1 || $role == 3 || $role == 11 || $role == 4) {
$idAffectation = $this->getUser()->getIdAffectation()->getIdAffectation();
}
$params['idUtilisateur'] = $this->getUser()->getIdUtilisateur();
$params['role'] = $role;
$params['affectation'] = $idAffectation;
$params['federation'] = $idFederation;
$resultat = $this->plmService->getListePlm($params);
return $this->specializedJsonResponse->getJson(true, $resultat);
}
#[Route(path: '/api/annulerPlm', name: 'cts_annuler_plm')]
public function annulerPlm(Request $request)
{
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
$request->request->replace(is_array($data) ? $data : []);
$params = $request->request->all();
$accessRuleService = $this->accessRule;
$isReader = $accessRuleService->isReader();
$annulerPlm = $isReader ? false : $this->plmService->annulerPlm($params['idPlm']);
if ($annulerPlm) {
$success = true;
$data = "PLM annulé avec succès";
} else {
$success = false;
$data = "Erreur durant l'annulation de la PLM !";
}
return $this->specializedJsonResponse->getJson($success, $data);
}
#[Route(path: '/api/etapePrecedentePlm', name: 'cts_etape_precedente_plm')]
public function etapePrecedentePlm(Request $request)
{
try {
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
$request->request->replace(is_array($data) ? $data : []);
$params = $request->request->all();
$em = $this->doctrine->getManager();
$projetLettreMission = $em->getRepository(ProjetLettreMission::class)->find($params['idPlm']);
$role = $this->getUser()->getUtilisateur()->getIdRole();
$workflow = $projetLettreMission->getIdWorkflow()->getIdWorkflow();
if ((5 == $role || 8 == $role) && 3 == $workflow) {
$workflow = $em->getRepository(Workflow::class)->find(4);
$projetLettreMission->setIdWorkflow($workflow);
$em->persist($projetLettreMission);
$em->flush();
$success = true;
$data = "Vous récupérez le PLM à l'état en cours de modification par le DTN";
} else {
$success = false;
$data = "Vous n'êtes pas authorisé a effectuer cette operation !";
}
} catch (Exception $e) {
$success = false;
$data = $e->getMessage();
}
return $this->specializedJsonResponse->getJson($success, $data);
}
#[Route(path: '/api/etapePrecedentePlmSignature', name: 'cts_etape_precedente_plm_signature')]
public function etapePrecedentePlmSignature(Request $request)
{
try {
$accessRuleService = $this->accessRule;
$accessRuleService->readerFirewall();
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
$request->request->replace(is_array($data) ? $data : []);
$params = $request->request->all();
$em = $this->doctrine->getManager();
$projects = [];
foreach ($params['listePlm'] as $key => $projet) {
$projetLettreMission = $em->getRepository(ProjetLettreMission::class)->find($projet['idPlm']);
$editForm = $this->createForm(\App\Form\ProjetLettreMissionType::class, $projetLettreMission);
$editForm->handleRequest($request);
$idPlm = $this->persistAndCloneSignature($projetLettreMission, $projet);
$em->flush();
$newProjetLettreMission = $em->getRepository(ProjetLettreMission::class)->find($idPlm);
$newProjetLettreMission->setIdParentProjetLm($projet['idPlm']);
$em->persist($newProjetLettreMission);
$em->flush();
if ($newProjetLettreMission) {
$item = ['idParentPlm' => $projet['idPlm'], 'idPlm' => $idPlm];
$projects[] = $item;
}
}
$success = true;
$data = ["message" => "Vous récupérez le PLM à l'état en cours de modification par le DTN", "data" => $projects];
} catch (\Exception $e) {
$success = false;
$data = $e->getMessage();
}
return $this->specializedJsonResponse->getJson($success, $data);
}
/**
* Initialise la comparaison
*/
#[Route(path: '/api/get_donnees_compare_plm/{idUser}', name: 'ctsweb_get_donnees_compare_plm')]
public function initComparaisonPlm(Request $request)
{
$listVersionsSource = [];
$listVersionsAComparer = [];
$idPlmComparer = null;
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
$request->request->replace(is_array($data) ? $data : []);
$params = $request->request->all();
$repositoryUi = $this->doctrine->getManager()->getRepository(UtilisateurInformation::class);
$repositoryPLM = $this->doctrine->getManager()->getRepository(ProjetLettreMission::class);
$repositoryLM = $this->doctrine->getManager()->getRepository(LettreMission::class);
$idUtilisateur = $request->attributes->get('idUser');
$infoUser = $repositoryUi->findDataForPageProfil($idUtilisateur);
try {
$dataInfoPlm = $repositoryPLM->findProjetLettreMission($idUtilisateur);
$lm = $repositoryLM->find($dataInfoPlm['idLm']);
$idLm = $dataInfoPlm['idLm'];
$versionSource = [];
$versionAComparer = [];
$idPlmSource = null;
if ($lm instanceof LettreMission) {
foreach ($lm->getPlm() as $key => $plm) {
if ($plm instanceof ProjetLettreMission) {
$listVersionsSource[$key] = $listVersionsAComparer[$key] = $plm->getVersion();
if ($dataInfoPlm['version'] == $plm->getVersion()) {
$enCours = $plm->getVersion() . " (En cours)";
$idPlmComparer = $plm->getIdProjetLm();
} else {
$enCours = $plm->getVersion();
}
$versionSource[] = ["id" => $plm->getIdProjetLm(), "version" => $enCours, "selected" => $dataInfoPlm['version'] - 1 == $plm->getVersion()];
$versionAComparer[] = ["id" => $plm->getIdProjetLm(), "version" => $enCours, "selected" => $dataInfoPlm['version'] == $plm->getVersion()];
if ($idPlmSource == null) {
if ($dataInfoPlm['version'] - 1 == $plm->getVersion()) {
$idPlmSource = $plm->getIdProjetLm();
} else {
$idPlmSource = $plm->getIdParentProjetLm();
}
}
}
}
array_multisort($listVersionsSource, SORT_ASC, $versionSource);
array_multisort($listVersionsAComparer, SORT_ASC, $versionAComparer);
array_splice($versionAComparer, 0, 1);
array_pop($versionSource);
}
$synthese = $this->missionCheck->syntheseComparaison($idPlmSource, $idPlmComparer);
$plmComparer = $this->missionCheck->comparaisonEntrePlm($idPlmSource, $idPlmComparer, $idLm);
$data = ["infoCts" => $infoUser, "infosLmEc" => $dataInfoPlm, "versionSource" => $versionSource, "versionAComparer" => $versionAComparer, "synthese" => $synthese, "comparaison" => $plmComparer];
$return = ["success" => true, "data" => $data];
} catch (\Exception $e) {
$return = ["success" => false, "data" => $e->getMessage()];
}
return new JsonResponse($return);
}
#[Route(path: '/api/comparaison_plm', name: 'ctsweb_post_donnees_compare_plm')]
public function comparaisonPlm(Request $request)
{
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
$request->request->replace(is_array($data) ? $data : []);
$params = $request->request->all();
$repositoryPLM = $this->doctrine->getManager()->getRepository(ProjetLettreMission::class);
$idUtilisateur = $params['idUser'];
$idPlmSource = $params['idPlmSource'];
$idPlmComparer = $params['idPlmCompare'];
try {
$accessRuleService = $this->accessRule;
$accessRuleService->readerFirewall();
$dataInfoPlm = $repositoryPLM->findProjetLettreMission($idUtilisateur);
$idLm = $dataInfoPlm['idLm'];
$synthese = $this->missionCheck->syntheseComparaison($idPlmSource, $idPlmComparer);
$plmComparer = $this->missionCheck->comparaisonEntrePlm($idPlmSource, $idPlmComparer, $idLm);
$data = ["synthese" => $synthese, "comparaison" => $plmComparer];
$return = ["success" => true, "data" => $data];
} catch (\Exception $e) {
$return = ["success" => false, "data" => $e->getMessage()];
}
return new JsonResponse($return);
}
#[Route(path: '/api/lmSigner/{projetLettreMission}', name: 'ctsweb_lmPdf', requirements: ['odm' => '\d+'])]
public function generatePdfLm(ProjetLettreMission $projetLettreMission)
{
$em = $this->doctrine->getManager();
$utilisateur = $em->getRepository(Utilisateur::class)->find(3971);
$workflow = $em->getRepository(Workflow::class)->find(7);
$projetLettreMission->getIdLm()->setSignataire($utilisateur);
$date = new \DateTime();
$projetLettreMission->setIdWorkflow($workflow);
$projetLettreMission->getIdLm()->setDateDeSignature($date);
$em->persist($projetLettreMission);
$em->flush();
$response = new Response('LM signée');
return $response;
}
#[Route(path: '/api/pdfLmDownload/{projetLettreMission}/{link}', name: 'ctsweb_downlaodLmPdf', requirements: ['lettreMission' => '\d+'])]
public function downloadPdfLm(ProjetLettreMission $projetLettreMission, $link)
{
$path = $this->getParameter('dir_file_lm');
if ($projetLettreMission->getIdLm()->getSignataire() || $projetLettreMission->getIdWorkflow()->getIdWorkflow() == 7) {
if (file_exists($path . sha1($projetLettreMission->getIdLm()->getIdLm()) . '.pdf')) {
$content = file_get_contents("$path{$link}.pdf", FILE_USE_INCLUDE_PATH);
$response = new \Symfony\Component\HttpFoundation\Response();
$response->headers->set('Content-Type', 'mime/type');
$response->headers->set('Content-Disposition', "attachment;filename=\"{$link}.pdf");
$response->setContent($content);
} else {
$response = new Response('fichier introuvable sur le serveur');
}
} else {
$content = $this->generateLmPdf->generatePdf($projetLettreMission, true);
$response = new Response(
$content,
Response::HTTP_OK,
['Content-Type' => 'application/pdf', 'Content-Length' => strlen((string) $content), 'Content-Disposition' => "attachment;filename=\"{$link}.pdf", 'Accept-Ranges' => 'bytes']
);
}
return $response;
}
#[Route(path: '/api/exportexcelplms', name: 'ctsweb_export_excel_plms')]
public function exportExcelplms()
{
$listProjectLm = $this->getListProjectLmByRole();
$response = $this->exportExcelLms->generateExcel($listProjectLm);
$handle = fopen('php://memory', 'r+');
$fileName = 'projetLm_' . date('d_m_Y');
rewind($handle);
$dispositionHeader = $response->headers->makeDisposition(
ResponseHeaderBag::DISPOSITION_ATTACHMENT,
$fileName . '.xls'
);
$response->headers->set('Content-Type', 'text/vnd.ms-excel; charset=utf-8');
$response->headers->set('Pragma', 'public');
$response->headers->set('Cache-Control', 'maxage=1');
$response->headers->set('Content-Disposition', $dispositionHeader);
return $response;
}
#[Route(path: '/api/exportexcel_lms', name: 'ctsweb_export_excel_lms')]
public function exportExcel_lms()
{
$user = $this->getUser();
$listProjectLm = $this->lmService->getLmInMyPerimeter(
['role' => $user->getUtilisateur()->getIdRole(), 'federation' => $user->getIdFederation(), 'affectation' => $user->getIdAffectation()]
);
$response = $this->exportExcelLms->generateExcel_lm($listProjectLm);
$handle = fopen('php://memory', 'r+');
$fileName = 'LettreDeMission_' . date('d_m_Y');
rewind($handle);
$dispositionHeader = $response->headers->makeDisposition(
ResponseHeaderBag::DISPOSITION_ATTACHMENT,
$fileName . '.xls'
);
$response->headers->set('Content-Type', 'text/vnd.ms-excel; charset=utf-8');
$response->headers->set('Pragma', 'public');
$response->headers->set('Cache-Control', 'maxage=1');
$response->headers->set('Content-Disposition', $dispositionHeader);
return $response;
}
#[Route(path: '/api/checkQuotite', name: 'cts_web_control_upd')]
public function compareVersionOfPlm(Request $request)
{
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
$request->request->replace(is_array($data) ? $data : []);
$params = $request->request->all();
$em = $this->doctrine->getManager();
$projetLettreMission = $em->getRepository(ProjetLettreMission::class)->find($params['projet_lettre_mission']['idPlm']);
$projetLettreMissionLast = $em->getRepository(ProjetLettreMission::class)->getLastPlmForDtn($projetLettreMission->getIdLm());
if ($projetLettreMissionLast && $projetLettreMission) {
$checkActivite = $this->checkListActivite($projetLettreMission, $projetLettreMissionLast);
$checkActiviteAutre = $this->checkListAutreActivite($projetLettreMission, $projetLettreMissionLast);
$checkPlm = $this->differenceBetweenTwoPlm($params['projet_lettre_mission'], $projetLettreMissionLast);
if ($checkActivite == false || $checkActiviteAutre == false || $checkPlm == false) {
$checkList = false;
} else {
$checkList = true;
}
} else {
$checkList = true;
}
return new JsonResponse(['data' => $checkList]);
}
private function checkListActivite(ProjetLettreMission $projetLettreMission, ProjetLettreMission $projetLettreMissionLast)
{
$em = $this->doctrine->getManager();
$countListActivite = 0;
$counter = 0;
$nbMissionSend = 0;
foreach ($projetLettreMissionLast->getMission() as $mission) {
if ($mission instanceof Mission) {
$listActivite = $em->getRepository(RefActiviteRefSousAction::class)->findOneBy(['idActivite' => $mission->getIdActivite()->getIdActivite(), 'activiteActive' => true]);
if ($listActivite) {
$sousActionRefAction = $em->getRepository(RefSousActionRefAction::class)->findOneBy(['idSousAction' => $listActivite->getIdSousAction()->getIdSousAction()]);
if ($sousActionRefAction->getSousActionActive() == true) {
$nbMissionSend += is_countable($listActivite) ? count($listActivite) : 0;
}
}
}
}
$nbMissionStorage = count($projetLettreMission->getMission());
if ($nbMissionStorage != $nbMissionSend) {
$counter++;
} else {
foreach ($projetLettreMission->getMission() as $mission) {
foreach ($projetLettreMissionLast->getMission() as $listMissionLast) {
if ($mission->getIdActivite()->getIdActivite() == $listMissionLast->getIdActivite()->getIdActivite()) {
$countListActivite++;
if (
$listMissionLast->getQuotiteNationale() != $mission->getQuotiteNationale() ||
$listMissionLast->getQuotiteRegionale() != $mission->getQuotiteRegionale()
) {
$counter++;
}
}
}
}
}
if (($countListActivite != $nbMissionStorage && $nbMissionStorage > 0 && $nbMissionStorage == $nbMissionSend) || $counter > 0) {
$data = false;
} else {
$data = true;
}
return $data;
}
private function checkListAutreActivite(ProjetLettreMission $projetLettreMission, ProjetLettreMission $projetLettreMissionLast)
{
$countListActiviteAutre = 0;
$counterAutre = 0;
$nbMissionStorageAutre = count($projetLettreMission->getPlmActiviteAutre());
$nbMissionSendAutre = count($projetLettreMissionLast->getPlmActiviteAutre());
if ($nbMissionStorageAutre != $nbMissionSendAutre) {
$counterAutre++;
} else {
foreach ($projetLettreMission->getPlmActiviteAutre() as $missionAutre) {
foreach ($projetLettreMissionLast->getPlmActiviteAutre() as $activiteAutre) {
if ($missionAutre->getIdAction() == $activiteAutre->getIdAction() && $missionAutre->getIdSousAction() == $activiteAutre->getIdSousAction() && $activiteAutre->getLibelleActAutre() == $activiteAutre->getLibelleActAutre()) {
$countListActiviteAutre++;
if (
$missionAutre->getQuotiteNatAutre() != $activiteAutre->getQuotiteNatAutre() ||
$missionAutre->getQuotiteRegAutre() != $activiteAutre->getQuotiteRegAutre()
) {
$counterAutre++;
}
}
}
}
}
if (
($countListActiviteAutre != $nbMissionStorageAutre && $nbMissionStorageAutre > 0 &&
$nbMissionStorageAutre == $nbMissionSendAutre) || $counterAutre > 0
) {
$data = false;
} else {
$data = true;
}
return $data;
}
private function differenceBetweenTwoPlm(array $listDataPost, ProjetLettreMission $projetLettreMissionLast)
{
$valid = true;
if ($projetLettreMissionLast->getDateDebut()->format('d/m/Y') != $listDataPost['dateDebut']) {
$valid = false;
}
if ($projetLettreMissionLast->getDateFin()->format('d/m/Y') != $listDataPost['dateFin']) {
$valid = false;
}
if ($projetLettreMissionLast->getIdFop()) {
if ($projetLettreMissionLast->getIdFop()->getIdFop() != $listDataPost['idFop']) {
$valid = false;
}
}
if ($projetLettreMissionLast->getLieu()) {
if ($projetLettreMissionLast->getLieu()->getIdLieu() != $listDataPost['idLieu']) {
$valid = false;
}
}
$listDiscipline = $this->doctrine->getManager()->getRepository(RefDisciplineLm::class)
->getDisciplineByPlm($projetLettreMissionLast->getIdProjetLm());
$totalDisplineStorage = is_countable($listDiscipline) ? count($listDiscipline) : 0;
$totalDisciplineSend = is_countable($listDataPost['idDiscipline']) ? count($listDataPost['idDiscipline']) : 0;
if ($totalDisplineStorage != $totalDisciplineSend) {
$valid = false;
} else {
if ($listDiscipline) {
$counte = 0;
foreach ($listDiscipline as $disciplineStorage) {
foreach ($listDataPost['idDiscipline'] as $disciplineSend) {
if ($disciplineSend == $disciplineStorage['id_discipline']) {
$counte++;
}
}
}
if ($counte == $totalDisplineStorage) {
$valid = true;
} else {
$valid = false;
}
} else {
$valid = true;
}
}
if ($projetLettreMissionLast->getContenuPrecisionDtn() != $listDataPost['texteDtn']) {
$valid = false;
}
if ($projetLettreMissionLast->getContenuPrecisionSH() != $listDataPost['textSupHierarchique']) {
$valid = false;
}
return $valid;
}
private function sendMailNotification()
{
$em = $this->doctrine->getManager();
$gabRep = $em->getRepository(RefGabarit::class);
$ui = $this->getUser();
$uid = $this->getUser()->getUtilisateur()->getIdUtilisateur();
$uimail = $em->getRepository(Utilisateur::class)->findBy(['idUtilisateur' => $uid])[0]->getCourriel();
$role = $this->getUser()->getUtilisateur()->getIdRole();
$subject = sprintf('CTS-WEB : Lettre de Mission - %s %s', $ui->getNom(), $ui->getPrenom());
$emailMailer = $this->getParameter('mailer_user');
$expediteurMail = (filter_var($emailMailer, FILTER_VALIDATE_EMAIL)) ? $emailMailer : 'donotreply@sports.gouv.fr';
//$host = $this->getParameter('host');
$mail_contact = null;
$mail_ass_info = $this->doctrine->getManager()->getRepository(ParametrageTexte::class)->getByCode('COURRIEL_ASSISTANCE_INFO');
if ((is_countable($mail_ass_info) ? count($mail_ass_info) : 0) > 0)
$mail_contact = $mail_ass_info[0]->getTexte();
if (RefRole::ROLE_FEDE === $role || RefRole::ROLE_FEDE_INVITE === $role || RefRole::ROLE_CTS === $role) {
$federation = $ui->getIdFederation()->getIdFederation();
$affectation = $ui->getIdAffectation()->getIdAffectation();
} else {
$federation = null;
$affectation = $ui->getIdAffectation()->getIdAffectation();
}
$recipients = $gabRep->emailNotification($federation, $affectation, 'emailLm');
// if (!filter_var($recipients, FILTER_VALIDATE_EMAIL)) {
// $recipients = [];
// }
if (!empty($recipients)) {
$message = (new Email())
->subject($subject)
->from($expediteurMail)
->to(...$recipients)
->html(
$this->twig->render(
'Notification/notification_lm_dtn.html.twig',
['host' => $mail_contact, 'civility' => $ui->getCivilite(), 'lastname' => $ui->getNom(), 'firstname' => $ui->getPrenom(), 'mailDemandeur' => $uimail]
),
'text/html'
);
$this->mailer->send($message);
}
}
}