src/Controller/LmController.php line 119

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\Config\Definition\Exception\Exception;
  5. use Symfony\Component\HttpFoundation\JsonResponse;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Symfony\Component\HttpFoundation\Response;
  8. use Symfony\Component\HttpFoundation\ResponseHeaderBag;
  9. use Symfony\Component\Routing\Annotation\Route;
  10. use App\Entity\BilanActAutreInd;
  11. use App\Entity\BilanActAutreIndAutre;
  12. use App\Entity\BilanActInd;
  13. use App\Entity\BilanActIndAutre;
  14. use App\Entity\BilanLmActivite;
  15. use App\Entity\BilanLmActiviteAutre;
  16. use App\Entity\Parametre;
  17. use App\Entity\HistoPoste;
  18. use App\Entity\HistoFederation;
  19. use App\Entity\HistoAffectation;
  20. use App\Entity\ParametrageTexte;
  21. use App\Entity\RFederation;
  22. use App\Entity\UtilisateurInformation;
  23. use App\Entity\Utilisateur;
  24. use App\Entity\RefLieu;
  25. use App\Entity\RefDiscipline;
  26. use App\Entity\RefActiviteRefSousAction;
  27. use App\Entity\RefSousActionRefAction;
  28. use App\Entity\RefGabarit;
  29. use App\Entity\LettreMission;
  30. use App\Entity\Mission;
  31. use App\Entity\PlmActiviteAutre;
  32. use App\Entity\PlmActiviteAutreIndicAutre;
  33. use App\Entity\PlmActiviteIndic;
  34. use App\Entity\PlmActiviteIndicAutre;
  35. use App\Entity\PlmIndicateurAutre;
  36. use App\Entity\ProjetLettreMission;
  37. use App\Entity\RapportActivite;
  38. use App\Entity\RefDisciplineLm;
  39. use App\Entity\RefFederation;
  40. use App\Entity\RefFop;
  41. use App\Entity\RefRole;
  42. use App\Entity\Workflow;
  43. use App\Entity\RefAffectation;
  44. use Doctrine\Persistence\ManagerRegistry;
  45. use App\Services\LmService;
  46. use App\Services\CheckLastMission;
  47. use App\Services\AccessRule;
  48. use App\Services\MissionCheck;
  49. use App\Services\GenerateLmPdf;
  50. use App\Services\CloneLastPlm;
  51. use App\Services\PlmService;
  52. use App\Services\ExportExcelLms;
  53. use App\Services\Mailer;
  54. use App\Services\Lib\SpecializedJsonResponse;
  55. use Symfony\Component\Mailer\MailerInterface;
  56. use Symfony\Component\Mime\Email;
  57. use Twig\Environment;
  58. use App\Services\Lib\EmailSHDecision;
  59. /**
  60.  * Description of HomeController
  61.  *
  62.  * @author Maxime Dequant
  63.  */
  64. class LmController extends AbstractController
  65. {
  66.     private ManagerRegistry $doctrine;
  67.     private LmService $lmService;
  68.     private CheckLastMission $checkLastMission;
  69.     private AccessRule $accessRule;
  70.     private MissionCheck $missionCheck;
  71.     private GenerateLmPdf $generateLmPdf;
  72.     private CloneLastPlm $cloneLastPlm;
  73.     private PlmService $plmService;
  74.     private ExportExcelLms $exportExcelLms;
  75.     private MailerInterface $mailer;
  76.     private MailerInterface $mailerInterface;
  77.     private SpecializedJsonResponse $specializedJsonResponse;
  78.     private EmailSHDecision $emailSHDecision;
  79.     private $twig;
  80.     public function __construct(
  81.         ManagerRegistry $doctrine,
  82.         LmService $lmService,
  83.         CheckLastMission $checkLastMission,
  84.         AccessRule $accessRule,
  85.         MissionCheck $missionCheck,
  86.         GenerateLmPdf $generateLmPdf,
  87.         CloneLastPlm $cloneLastPlm,
  88.         PlmService $plmService,
  89.         ExportExcelLms $exportExcelLms,
  90.         MailerInterface $mailer,
  91.         Environment $twig,
  92.         EmailSHDecision $emailSHDecision,
  93.         MailerInterface $mailerInterface,
  94.         SpecializedJsonResponse $specializedJsonResponse
  95.     ) {
  96.         $this->doctrine $doctrine;
  97.         $this->lmService $lmService;
  98.         $this->checkLastMission $checkLastMission;
  99.         $this->accessRule $accessRule;
  100.         $this->missionCheck $missionCheck;
  101.         $this->generateLmPdf $generateLmPdf;
  102.         $this->cloneLastPlm $cloneLastPlm;
  103.         $this->plmService $plmService;
  104.         $this->exportExcelLms $exportExcelLms;
  105.         $this->mailer $mailer;
  106.         $this->specializedJsonResponse $specializedJsonResponse;
  107.         $this->twig $twig;
  108.         $this->mailerInterface $mailerInterface;
  109.         $this->emailSHDecision $emailSHDecision;
  110.     }
  111.     #[Route(path'/api/lm_action'name'ctsweb_lm_action')]
  112.     public function Lm()
  113.     {
  114.         $repositoryLM $this->doctrine->getManager()->getRepository(LettreMission::class);
  115.         try {
  116.             $result $repositoryLM->findLettreMission($this->getUser()->getIdUtilisateur(), 'current2');
  117.             if (isset($result[0])) {
  118.                 $result[0]['verfication'] = $this->getParameter('verification');
  119.                 $result[0]['link'] = sha1((string) $result[0]['idLm']);
  120.             } else {
  121.                 $result = [];
  122.             }
  123.             $data = ['success' => true'data' => $result];
  124.         } catch (\Exception $e) {
  125.             $data = ['success' => false'data' => $e->getMessage()];
  126.         }
  127.         return new JsonResponse($data);
  128.     }
  129.     #[Route(path'/api/lm_archive'name'ctsweb_lm_archive')]
  130.     public function LmArchive(Request $request)
  131.     {
  132.         try {
  133.             $data json_decode($request->getContent(), true);
  134.             $request->request->replace(is_array($data) ? $data : array());
  135.             $parametres $request->request->all();
  136.             $id = isset($parametres['idCts']) ? $parametres['idCts'] : $this->getUser()->getIdUtilisateur();
  137.             $data = ['success' => true'data' => $this->lmService->getLmArchivees($id)];
  138.         } catch (\Exception $e) {
  139.             $data = ['success' => false'data' => $e->getMessage()];
  140.         }
  141.         return new JsonResponse($data);
  142.     }
  143.     #[Route(path'/api/plm_action'name'ctsweb_plm_action')]
  144.     public function Plm()
  145.     {
  146.         $repositoryPLM $this->doctrine->getManager()->getRepository(ProjetLettreMission::class);
  147.         try {
  148.             $result $repositoryPLM->findProjetLettreMission($this->getUser()->getIdUtilisateur());
  149.             if ($result) {
  150.                 $result['lien'] = sha1((string) $result['idProjetLm']);
  151.             }
  152.             $data = ['success' => true'data' => ($result ?? [])];
  153.         } catch (\Exception $e) {
  154.             $data = ['success' => false'data' => $e->getMessage()];
  155.         }
  156.         return new JsonResponse($data);
  157.     }
  158.     #[Route(path'/api/lm_mes_cts'name'ctsweb_lm_mes_cts')]
  159.     public function LmMesCts()
  160.     {
  161.         try {
  162.             $user $this->getUser();
  163.             $listeCts $this->lmService->getLmInMyPerimeter(
  164.                 ['role' => $user->getUtilisateur()->getIdRole(), 'federation' => $user->getIdFederation(), 'affectation' => $user->getIdAffectation()]
  165.             );
  166.             //$data = ['success' => true, 'data' => ['listeCts' => $listeCts, 'urlSignature' => $this->getParameter("verification")]];
  167.             $data = ['success' => true'data' => ['listeCts' => $listeCts]];
  168.         } catch (\Exception $e) {
  169.             $data = ['success' => false'data' => $e->getMessage()];
  170.         }
  171.         return new JsonResponse($data);
  172.     }
  173.     public function PlmMesCtsAction()
  174.     {
  175.         $user $this->getUser();
  176.         $repositoryUI $this->doctrine->getManager()->getRepository(UtilisateurInformation::class);
  177.         $repositoryPLM $this->doctrine->getManager()->getRepository(ProjetLettreMission::class);
  178.         try {
  179.             $listeCts $repositoryUI->getCtsInformationGeneralList(
  180.                 ['role' => $user->getUtilisateur()->getIdRole(), 'federation' => $user->getIdFederation(), 'affectation' => $user->getIdAffectation()]
  181.             );
  182.             $data = ['success' => true'data' => $repositoryPLM->projetLettresMissionDeMesCts($listeCts)];
  183.         } catch (\Exception $e) {
  184.             $data = ['success' => false'data' => $e->getMessage()];
  185.         }
  186.         return new JsonResponse($data);
  187.     }
  188.     public function LmASignerAction()
  189.     {
  190.         $repositoryLM $this->doctrine->getManager()->getRepository(LettreMission::class);
  191.         $repositoryUI $this->doctrine->getManager()->getRepository(UtilisateurInformation::class);
  192.         try {
  193.             $listeCts $repositoryUI->getCtsInformationGeneralList(
  194.                 ['role' => $this->getUser()->getUtilisateur()->getIdRole(), 'federation' => $this->getUser()->getIdFederation(), 'affectation' => $this->getUser()->getIdAffectation()]
  195.             );
  196.             $data $repositoryLM->lettresMissionASigner($listeCts);
  197.             $success true;
  198.         } catch (\Exception $e) {
  199.             $success false;
  200.             $data $e->getMessage();
  201.             error_log($e->getMessage());
  202.         }
  203.         return $this->specializedJsonResponse->getJson($success$data);
  204.     }
  205.     #[Route(path'/api/afficher_rapports'name'ctsweb_afficher_rapports_activite')]
  206.     public function AfficherRapportActivite()
  207.     {
  208.         try {
  209.             $em $this->doctrine->getManager();
  210.             $listRapports $em->getRepository(RapportActivite::class)->findAllReportOfActivitiesByUser($this->getUser()->getIdUtilisateur());
  211.             $result = [];
  212.             foreach ($listRapports as $key => $ra) {
  213.                 $result[$key]['dateDeCreation'] = $ra['dateDeCreation']->format('d/m/Y');
  214.                 $result[$key]['dateDeExpiration'] = $ra['dateDeCreation']->add(new \DateInterval('P90D'))->format('d/m/Y');
  215.                 $result[$key]['dateDebutRA'] = $ra['dateDebutRA']->format('d/m/Y');
  216.                 $result[$key]['dateFinRA'] = $ra['dateFinRA']->format('d/m/Y');
  217.                 $result[$key]['dateDebutPLM'] = $ra['dateDebutPLM']->format('d/m/Y');
  218.                 $result[$key]['dateFinPLM'] = $ra['dateFinPLM']->format('d/m/Y');
  219.                 $result[$key]['idRapportAct'] = $ra['idRapportActivite'];
  220.             }
  221.             $data = ['success' => true'data' => $result];
  222.         } catch (\Exception $e) {
  223.             $data = ['success' => false'data' => $e->getMessage()];
  224.         }
  225.         return new JsonResponse($data);
  226.     }
  227.     #[Route(path'/api/create_rapport_donnees'name'ctsweb_create_rapport_activite_donnees')]
  228.     public function CreateRapportActiviteDonnees()
  229.     {
  230.         $repositoryLM $this->doctrine->getManager()->getRepository(LettreMission::class);
  231.         $repositoryR_F $this->doctrine->getManager()->getRepository(RFederation::class);
  232.         try {
  233.             $lms $repositoryLM->findAllLettreMission($this->getUser()->getIdUtilisateur());
  234.             $lmArray = [];
  235.             $lmArray[0]['libelle'] = 'Aucune';
  236.             foreach ($lms as $lm) {
  237.                 $lmArray[$lm['idLm']]['libelle'] = $lm['libelleRole'] . '-' .
  238.                     $repositoryR_F->findOneByRAdmDiside($this->getUser()->getIdFederation()->getRAdmDiside())->getLibelleSport() . '-' .
  239.                     $this->getUser()->getIdAffectation()->getLibelleAffectation();
  240.                 $lmArray[$lm['idLm']]['dateDebut'] = $lm['dateDebut']->format('d/m/Y');
  241.                 $lmArray[$lm['idLm']]['dateFin'] = $lm['dateFin']->format('d/m/Y');
  242.             }
  243.             $success true;
  244.         } catch (\Exception $e) {
  245.             $success false;
  246.             $lmArray $e->getMessage();
  247.         }
  248.         return $this->specializedJsonResponse->getJson($success$lmArray);
  249.     }
  250.     #[Route(path'/api/create_rapport_donnees'name'ctsweb_create_rapport_activite_donnees')]
  251.     public function CreateRapportActivite(Request $request)
  252.     {
  253.         $requestForm $request->request->all();
  254.         $em $this->doctrine->getManager();
  255.         try {
  256.             $dateDebutRA \DateTime::createFromFormat('d/m/Y'$requestForm['dateDebutRA']);
  257.             $dateFinRA \DateTime::createFromFormat('d/m/Y'$requestForm['dateFinRA']);
  258.             $rapportActivite = new RapportActivite();
  259.             $rapportActivite->setIdLm($requestForm['idLm']);
  260.             $rapportActivite->setDateDeCreation(new \DateTime());
  261.             $rapportActivite->setDateDeDebut($dateDebutRA);
  262.             $rapportActivite->setDateDeFin($dateFinRA);
  263.             $rapportActivite->setIdUtilisateur($this->getUser()->getIdUtilisateur());
  264.             $em->persist($rapportActivite);
  265.             $em->flush();
  266.             $data 'Le rapport d\'activité a bien Ã©té enregistré';
  267.             $success true;
  268.         } catch (\Exception $e) {
  269.             $success false;
  270.             $data $e->getMessage();
  271.         }
  272.         return $this->specializedJsonResponse->getJson($success$data);
  273.     }
  274.     #[Route(path'/api/suppr_rapport'name'ctsweb_suppr_rapport_activite')]
  275.     public function SupprimerRapportActivite(Request $request)
  276.     {
  277.         $requestForm $request->request->all();
  278.         $repositoriesBilan = [];
  279.         array_push($repositoriesBilan$this->doctrine->getManager()->getRepository(BilanActAutreInd::class));
  280.         array_push($repositoriesBilan$this->doctrine->getManager()->getRepository(BilanActAutreIndAutre::class));
  281.         array_push($repositoriesBilan$this->doctrine->getManager()->getRepository(BilanActInd::class));
  282.         array_push($repositoriesBilan$this->doctrine->getManager()->getRepository(BilanActIndAutre::class));
  283.         array_push($repositoriesBilan$this->doctrine->getManager()->getRepository(BilanLmActivite::class));
  284.         array_push($repositoriesBilan$this->doctrine->getManager()->getRepository(BilanLmActiviteAutre::class));
  285.         $em $this->doctrine->getManager();
  286.         try {
  287.             $rapportActivite $em->find('App\Entity\RapportActivite'$requestForm['idRapportActivite']);
  288.             foreach ($repositoriesBilan as $rpb) {
  289.                 $bilans $rpb->findByIdRapportActivite($requestForm['idRapportActivite']);
  290.                 foreach ($bilans as $b) {
  291.                     if ($b != null) {
  292.                         $em->remove($b);
  293.                     }
  294.                 }
  295.             }
  296.             if ($rapportActivite != null) {
  297.                 $em->remove($rapportActivite);
  298.             }
  299.             $em->flush();
  300.             $data = ['success' => true'data' => 'Le rapport d\'activité a bien Ã©té supprimé'];
  301.         } catch (\Exception $e) {
  302.             $data = ['success' => false'data' => $e->getMessage()];
  303.             error_log($e->getMessage());
  304.         }
  305.         $response = new \Symfony\Component\HttpFoundation\Response(json_encode($dataJSON_THROW_ON_ERROR));
  306.         return $response;
  307.     }
  308.     #[Route(path'/api/getDonneesCreatePlm/{idUtilisateur}'name'ctsweb_get_donnees_create_plm')]
  309.     public function getDonneesCreatePlm($idUtilisateur)
  310.     {
  311.         $repositoryLM $this->doctrine->getManager()->getRepository(LettreMission::class);
  312.         $repositoryUi $this->doctrine->getManager()->getRepository(UtilisateurInformation::class);
  313.         $repositoryRefFederation $this->doctrine->getManager()->getRepository(RefFederation::class);
  314.         try {
  315.             $infoUser $repositoryUi->findDataForPageProfil($idUtilisateur);
  316.             $infoUser['saisonSportive'] = $repositoryRefFederation->find($infoUser['idFederation'])->getSaisonSportiveFederation();
  317.             $dataInfoCreatePlm = (null != $repositoryLM->findInformationsCreationPlm($idUtilisateur)) ? $repositoryLM->findInformationsCreationPlm($idUtilisateur) : [];
  318.             if (!empty($dataInfoCreatePlm) && is_array($dataInfoCreatePlm)) {
  319.                 $plmOk $dataInfoCreatePlm['dateChangementAdministratif'] == null || $dataInfoCreatePlm['dateChangementAdministratif'] > new \DateTime();
  320.             } else {
  321.                 $plmOk false;
  322.             }
  323.             $repositoryRefFop $this->doctrine->getManager()->getRepository(RefFop::class);
  324.             $libFop $repositoryRefFop->findDonneesAdmin();
  325.             $repositoryRefLieu $this->doctrine->getManager()->getRepository(RefLieu::class);
  326.             $libLieu $repositoryRefLieu->findDonneesAdmin();
  327.             $repositoryRefDiscipline $this->doctrine->getManager()->getRepository(RefDiscipline::class);
  328.             $libDiscipline $repositoryRefDiscipline->findDonneesAdmin($infoUser['idFederation']);
  329.             $data = ["infoCts" => $infoUser"infosLmEc" => $plmOk $dataInfoCreatePlm null"libelleLieu" => $libLieu"libelleDiscipline" => $libDiscipline"libelleFop" => $libFop];
  330.             $success true;
  331.         } catch (\Exception $e) {
  332.             $success false;
  333.             $data $e->getMessage();
  334.             error_log($e->getMessage());
  335.         }
  336.         // var_dump($libFop );
  337.         // die();
  338.         return $this->specializedJsonResponse->getJson($success$data);
  339.     }
  340.     #[Route(path'/api/plm_mes_cts'name'cts_plm_liste')]
  341.     public function getPlmByLmForAllStep()
  342.     {
  343.         $listPlm = [];
  344.         // Récupération des LM en cours de validités
  345.         $listUserForValidPlm $this->getCheckLmInCurrentDay();
  346.         $listProjectLm $this->getListProjectLmByRole();
  347.         $delai $this->doctrine->getManager()->getRepository(Parametre::class)->recupererParametre();
  348.         if (!= preg_match('/^\d*$/', (string) $delai)) {
  349.             throw new \Exception("La durée de la récupération de projet de lettre de missions n'est pas définie.");
  350.         }
  351.         $delai = new \DateInterval("P{$delai}D");
  352.         $curentDay = (new \DateTime())->format('Y-m-d');
  353.         $i 0;
  354.         foreach ($listProjectLm as $key => $plm) {
  355.             $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']];
  356.             /**
  357.              * Création d'une nouvelle lettre de missions
  358.              * Cas 1: Changement adminitratif
  359.              * Cas 2: PLM en cours Ã  l'état signé et date de fin antérieure Ã  la date du jour
  360.              */
  361.             if (
  362.                 ($plm['date_changement_administratif'] != null && $plm['date_changement_administratif'] <= $curentDay) ||
  363.                 ($plm['id_workflow'] == Workflow::LM_SIGNEE)
  364.             ) {
  365.                 $listPlm[$key]['projetLettreMission'] = null;
  366.                 $listPlm[$key]['lmValide'] = 0;
  367.                 if ($plm['date_changement_administratif'] != null && $plm['date_changement_administratif'] <= $curentDay) {
  368.                     $listPlm[$key]['date_changement_administratif'] = $plm['date_changement_administratif'];
  369.                 }
  370.             } else {
  371.                 $keyliste array_search($plm['id_utilisateur'], array_column($listUserForValidPlm'idUtilisateur'));
  372.                 if ($keyliste === false || $plm['date_changement_administratif'] != null) {
  373.                     $listPlm[$key]['lmValide'] = 0;
  374.                 } else {
  375.                     $listPlm[$key]['lmValide'] = 1;
  376.                 }
  377.                 $recupLettre $listPlm[$key]['lmValide'] ? false : new \DateTime() >= (new \DateTime($plm['date']))->add($delai);
  378.                 $newDateFin date("d/m/Y"strtotime((string) $plm['date_fin']));
  379.                 $newDateDebut date("d/m/Y"strtotime((string) $plm['date_debut']));
  380.                 $i++;
  381.                 $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];
  382.             }
  383.         }
  384.         $listPlmForNewCts = [];
  385.         $listProjectLmValide $this->getListProjectLmByRoleForNewCts();
  386.         foreach ($listProjectLmValide as $plmNewCts) {
  387.             $found false;
  388.             foreach ($listPlm as $key => $val) {
  389.                 if ($val['idUtilisateur'] === $plmNewCts['id_utilisateur']) {
  390.                     $found true;
  391.                     break;
  392.                 }
  393.             }
  394.             if (!$found) {
  395.                 $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];
  396.             }
  397.         }
  398.         $allListLm array_merge($listPlm$listPlmForNewCts);
  399.         asort($allListLm1);
  400.         return new JsonResponse(['success' => true'data' => $allListLm]);
  401.     }
  402.     public function getPlmByLmForAllStepBeforeSignatureAction()
  403.     {
  404.         $listPlm = [];
  405.         // Récupération des LM en cours de validités
  406.         $listUserForValidPlm $this->getCheckLmInCurrentDay();
  407.         $listProjectLm $this->getListProjectLmByRoleBeforeWorkflow(Workflow::LM_SIGNEE);
  408.         $delai $this->doctrine->getManager()->getRepository(Parametre::class)->recupererParametre();
  409.         if (!= preg_match('/^\d*$/', (string) $delai)) {
  410.             throw new \Exception("La durée de la récupération de projet de lettre de missions n'est pas définie.");
  411.         }
  412.         $delai = new \DateInterval("P{$delai}D");
  413.         $curentDay = (new \DateTime())->format('Y-m-d');
  414.         $i 0;
  415.         foreach ($listProjectLm as $key => $plm) {
  416.             $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']];
  417.             /**
  418.              * Création d'une nouvelle lettre de missions
  419.              * Cas 1: Changement adminitratif
  420.              * Cas 2: PLM en cours Ã  l'état signé et date de fin antérieure Ã  la date du jour
  421.              */
  422.             if (
  423.                 ($plm['date_changement_administratif'] != null && $plm['date_changement_administratif'] <= $curentDay) ||
  424.                 ($plm['id_workflow'] == Workflow::LM_SIGNEE && $plm['date_fin'] <= $curentDay)
  425.             ) {
  426.                 $listPlm[$key]['projetLettreMission'] = null;
  427.                 $listPlm[$key]['lmValide'] = 0;
  428.                 if ($plm['date_changement_administratif'] != null && $plm['date_changement_administratif'] <= $curentDay) {
  429.                     $listPlm[$key]['date_changement_administratif'] = $plm['date_changement_administratif'];
  430.                 }
  431.             } else {
  432.                 $keyliste array_search($plm['id_utilisateur'], array_column($listUserForValidPlm'idUtilisateur'));
  433.                 if ($keyliste === false || $plm['date_changement_administratif'] != null) {
  434.                     $listPlm[$key]['lmValide'] = 0;
  435.                 } else {
  436.                     $listPlm[$key]['lmValide'] = 1;
  437.                 }
  438.                 $recupLettre $listPlm[$key]['lmValide'] ? false : new \DateTime() >= (new \DateTime($plm['date']))->add($delai);
  439.                 $newDateFin date("d/m/Y"strtotime((string) $plm['date_fin']));
  440.                 $newDateDebut date("d/m/Y"strtotime((string) $plm['date_debut']));
  441.                 $i++;
  442.                 $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];
  443.             }
  444.         }
  445.         $listPlmForNewCts = [];
  446.         $listProjectLmValide $this->getListProjectLmByRoleForNewCtsBeforeWorkflow(Workflow::LM_SIGNEE);
  447.         foreach ($listProjectLmValide as $plmNewCts) {
  448.             $found false;
  449.             foreach ($listPlm as $key => $val) {
  450.                 if ($val['idUtilisateur'] === $plmNewCts['id_utilisateur']) {
  451.                     $found true;
  452.                     break;
  453.                 }
  454.             }
  455.             if (!$found) {
  456.                 $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];
  457.             }
  458.         }
  459.         $allListLm array_merge($listPlm$listPlmForNewCts);
  460.         asort($allListLm1);
  461.         return new JsonResponse(['success' => true'data' => $allListLm]);
  462.     }
  463.     private function getListProjectLmByRole()
  464.     {
  465.         $user $this->getUser();
  466.         $userRole $user->getUtilisateur()->getIdRole();
  467.         $em $this->doctrine->getManager()->getRepository(ProjetLettreMission::class);
  468.         $listPlm = [];
  469.         switch ($userRole) {
  470.             case RefRole::ROLE_FEDE:
  471.             case RefRole::ROLE_FEDE_INVITE:
  472.                 $federation $user->getIdFederation()->getIdFederation();
  473.                 $idUtilisateur $user->getUtilisateur()->getIdUtilisateur();
  474.                 $listPlm $em->findDtnProjectForLmOptimisation($federation$idUtilisateur);
  475.                 break;
  476.             case RefRole::ROLE_DR_SIGNATAIRE:
  477.             case RefRole::ROLE_DR:
  478.                 $userAffecation $this->getUser()->getIdAffectation()->getIdAffectation();
  479.                 $listPlm $em->findDrForLmOptimisation($userAffecation);
  480.                 break;
  481.             case RefRole::ROLE_DS_ADMIN:
  482.             case RefRole::ROLE_DS_INVITE:
  483.             case RefRole::ROLE_DS_SIGNATAIRE:
  484.             case RefRole::ROLE_LECTEUR:
  485.                 $listPlm $em->findDsProjectForLmOptimisation();
  486.                 break;
  487.         }
  488.         return $listPlm;
  489.     }
  490.     private function getListProjectLmByRoleBeforeWorkflow(int $workflow)
  491.     {
  492.         $user $this->getUser();
  493.         $userRole $user->getUtilisateur()->getIdRole();
  494.         $em $this->doctrine->getManager()->getRepository(ProjetLettreMission::class);
  495.         $listPlm = [];
  496.         switch ($userRole) {
  497.             case RefRole::ROLE_FEDE:
  498.             case RefRole::ROLE_FEDE_INVITE:
  499.                 $federation $user->getIdFederation()->getIdFederation();
  500.                 $idUtilisateur $user->getUtilisateur()->getIdUtilisateur();
  501.                 $listPlm $em->findDtnProjectForLmOptimisationToWorkflow($federation$idUtilisateur$workflow);
  502.                 break;
  503.             case RefRole::ROLE_DR_SIGNATAIRE:
  504.             case RefRole::ROLE_DR:
  505.                 $userAffecation $this->getUser()->getIdAffectation()->getIdAffectation();
  506.                 $listPlm $em->findDrForLmOptimisationToWorkflow($userAffecation$workflow);
  507.                 break;
  508.             case RefRole::ROLE_DS_ADMIN:
  509.             case RefRole::ROLE_DS_INVITE:
  510.             case RefRole::ROLE_DS_SIGNATAIRE:
  511.             case RefRole::ROLE_LECTEUR:
  512.                 $listPlm $em->findDsProjectForLmOptimisationToWorkflow($workflow);
  513.                 break;
  514.         }
  515.         return $listPlm;
  516.     }
  517.     private function getListProjectLmByRoleobj()
  518.     {
  519.         $user $this->getUser();
  520.         $userRole $user->getUtilisateur()->getIdRole();
  521.         $em $this->doctrine->getManager()->getRepository(ProjetLettreMission::class);
  522.         $listPlm = [];
  523.         switch ($userRole) {
  524.             case RefRole::ROLE_FEDE:
  525.             case RefRole::ROLE_FEDE_INVITE:
  526.                 $federation $user->getIdFederation()->getIdFederation();
  527.                 $idUtilisateur $user->getUtilisateur()->getIdUtilisateur();
  528.                 $listPlm $em->findDtnProjectForLmOptimisationobj($federation$idUtilisateur);
  529.                 break;
  530.             case RefRole::ROLE_DR_SIGNATAIRE:
  531.             case RefRole::ROLE_DR:
  532.                 $userAffecation $this->getUser()->getIdAffectation()->getIdAffectation();
  533.                 $listPlm $em->findDrForLmOptimisationobj($userAffecation);
  534.                 break;
  535.             case RefRole::ROLE_DS_ADMIN:
  536.             case RefRole::ROLE_DS_INVITE:
  537.             case RefRole::ROLE_DS_SIGNATAIRE:
  538.             case RefRole::ROLE_LECTEUR:
  539.                 $listPlm $em->findDsProjectForLmOptimisationobj();
  540.                 break;
  541.         }
  542.         return $listPlm;
  543.     }
  544.     private function getCheckLmInCurrentDay()
  545.     {
  546.         $user $this->getUser();
  547.         $userRole $user->getUtilisateur()->getIdRole();
  548.         $repPlm $this->doctrine->getManager()->getRepository(ProjetLettreMission::class);
  549.         $listUserForPlmValid = [];
  550.         switch ($userRole) {
  551.             case RefRole::ROLE_FEDE:
  552.             case RefRole::ROLE_FEDE_INVITE:
  553.                 $federation $user->getIdFederation()->getIdFederation();
  554.                 $listUserForPlmValid $repPlm->findListUserValidLmForToDate($federation'');
  555.                 break;
  556.             case RefRole::ROLE_DR_SIGNATAIRE:
  557.             case RefRole::ROLE_DR:
  558.                 $userAffecation $user->getIdAffectation()->getIdAffectation();
  559.                 $listUserForPlmValid $repPlm->findListUserValidLmForToDate(''$userAffecation);
  560.                 break;
  561.             case RefRole::ROLE_DS_ADMIN:
  562.             case RefRole::ROLE_DS_INVITE:
  563.             case RefRole::ROLE_DS_SIGNATAIRE:
  564.             case RefRole::ROLE_LECTEUR:
  565.                 $listUserForPlmValid $repPlm->findListUserValidLmForToDate();
  566.                 break;
  567.         }
  568.         return $listUserForPlmValid;
  569.     }
  570.     private function getListProjectLmByRoleForNewCts()
  571.     {
  572.         $userRole $this->getUser()->getUtilisateur()->getIdRole();
  573.         $em $this->doctrine->getManager();
  574.         $listPlmForNewCts = [];
  575.         switch ($userRole) {
  576.             case RefRole::ROLE_FEDE:
  577.             case RefRole::ROLE_FEDE_INVITE:
  578.                 $federation $this->getUser()->getIdFederation()->getIdFederation();
  579.                 $listPlmForNewCts $em->getRepository(ProjetLettreMission::class)->findDtnProjectForNewCtsLmOptimisation($federation);
  580.                 break;
  581.             case RefRole::ROLE_DS_ADMIN:
  582.             case RefRole::ROLE_DS_INVITE:
  583.             case RefRole::ROLE_DS_SIGNATAIRE:
  584.             case RefRole::ROLE_LECTEUR:
  585.                 $listPlmForNewCts $em->getRepository(ProjetLettreMission::class)->findDsProjectForNewDtnOptimisation();
  586.                 break;
  587.         }
  588.         return $listPlmForNewCts;
  589.     }
  590.     private function getListProjectLmByRoleForNewCtsBeforeWorkflow(int $workflow)
  591.     {
  592.         $userRole $this->getUser()->getUtilisateur()->getIdRole();
  593.         $em $this->doctrine->getManager();
  594.         $listPlmForNewCts = [];
  595.         switch ($userRole) {
  596.             case RefRole::ROLE_FEDE:
  597.             case RefRole::ROLE_FEDE_INVITE:
  598.                 $federation $this->getUser()->getIdFederation()->getIdFederation();
  599.                 $listPlmForNewCts $em->getRepository(ProjetLettreMission::class)->findDtnProjectForNewCtsLmOptimisation($federation);
  600.                 break;
  601.             case RefRole::ROLE_DS_ADMIN:
  602.             case RefRole::ROLE_DS_INVITE:
  603.             case RefRole::ROLE_DS_SIGNATAIRE:
  604.             case RefRole::ROLE_LECTEUR:
  605.                 $listPlmForNewCts $em->getRepository(ProjetLettreMission::class)->findDsProjectForNewDtnOptimisation();
  606.                 break;
  607.         }
  608.         foreach ($listPlmForNewCts as $key => $plm) {
  609.             if ($plm['id_workflow'] > $workflow) {
  610.                 unset($listPlmForNewCts[$key]);
  611.             }
  612.         }
  613.         return $listPlmForNewCts;
  614.     }
  615.     #[Route(path'/api/lm_a_signer'name'ctsweb_lm_a_signer')]
  616.     public function lmAsignerOptimisation()
  617.     {
  618.         try {
  619.             $listPlm = [];
  620.             $em $this->doctrine->getManager();
  621.             $userAffecation $this->getUser()->getIdAffectation()->getIdAffectation();
  622.             $listLmASigner $em->getRepository(ProjetLettreMission::class)->findListeLmForSigne($userAffecation);
  623.             foreach ($listLmASigner as $key => $plm) {
  624.                 $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']];
  625.                 $newDateFin date("d/m/Y"strtotime((string) $plm['date_fin']));
  626.                 $newDateDebut date("d/m/Y"strtotime((string) $plm['date_debut']));
  627.                 $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']];
  628.             }
  629.             $data = ['success' => true'data' => $listPlm];
  630.         } catch (\Exception $e) {
  631.             $data = ['success' => false'data' => $e->getMessage()];
  632.         }
  633.         return new JsonResponse($data);
  634.     }
  635.     #[Route(path'/api/getDonneesPlm/{plm}'name'cts_web_modif_plm')]
  636.     public function getDonneesPlm(ProjetLettreMission $plm)
  637.     {
  638.         $infoCts = [];
  639.         $infosLmEc = [];
  640.         $plmEc = [];
  641.         try {
  642.             $em $this->doctrine->getManager();
  643.             $plm $em->getRepository(ProjetLettreMission::class)->findlastPLMForListe($plm->getIdUtilisateur()->getIdUtilisateur());
  644.             $delai $em->getRepository(Parametre::class)->recupererParametre();
  645.             if (!= preg_match('/^\d*$/', (string) $delai)) {
  646.                 throw new \Exception("La durée de la récupération de projet de lettre de missions n'est pas définie.");
  647.             }
  648.             $delai = new \DateInterval("P{$delai}D");
  649.             if ($plm instanceof ProjetLettreMission) {
  650.                 $user $em->getRepository(UtilisateurInformation::class)->findDataForPageProfil($plm->getIdUtilisateur()->getIdUtilisateur());
  651.                 if ($user) {
  652.                     if ($plm instanceof ProjetLettreMission) {
  653.                         $infoCts[] = ['id_cts' => $plm->getIdUtilisateur()->getIdUtilisateur(), 'nom' => $user['nom'], 'prenom' => $user['prenom'], 'rSerLibl' => $user['rSerLibl'], 'libelleAffectation' => $user['libelleAffectation'], 'libellePoste' => $user['libellePoste'], 'saisonSportive' => $user['saisonSportiveFederation']];
  654.                         $lastPlm $this->checkLastMission->getLastMission($plm->getIdUtilisateur());
  655.                         $RefFopPlm null;
  656.                         if ($plm->getFonctComplementaire() != null) {
  657.                             $RefFopPlm $em->getRepository(RefFop::class)->findOneBy(['idFop' => $plm->getFonctComplementaire()]);
  658.                         }
  659.                         $ReflocalPlm null;
  660.                         if ($plm->getLocalisation() != null) {
  661.                             $ReflocalPlm $em->getRepository(RefAffectation::class)->findOneBy(['idAffectation' => $plm->getLocalisation()]);
  662.                         }
  663.                         if ($lastPlm) {
  664.                             $postePlm $em->getRepository(HistoPoste::class)->findByDatePoste($lastPlm->getDateFin(), $plm->getIdUtilisateur()->getIdUtilisateur());
  665.                             $fedePlm $em->getRepository(HistoFederation::class)->findByDateFederation($lastPlm->getDateFin(), $plm->getIdUtilisateur()->getIdUtilisateur());
  666.                             $affPlm $em->getRepository(HistoAffectation::class)->findByDateAffectation($lastPlm->getDateFin(), $plm->getIdUtilisateur()->getIdUtilisateur());
  667.                             $rFede $em->getRepository(RFederation::class)->findOneBy(['rAdmDiside' => $fedePlm->getFederation()->getRAdmDiside()]);
  668.                             // Correction de la mantis 33587 sur le format de date
  669.                             $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()];
  670.                         } else {
  671.                             $infosLmEc null;
  672.                         }
  673.                         if ($plm->getIdUtilisateur()->getIdRole() == || $plm->getIdUtilisateur()->getIdRole() == 12 || $plm->getIdUtilisateur()->getIdRole() == 5) {
  674.                             $userCts $em->getRepository(UtilisateurInformation::class)->findOneBy(['idUtilisateur' => $plm->getIdUtilisateur()->getIdUtilisateur()]);
  675.                             $subHiear $this->getDtn($userCts->getIdFederation());
  676.                             if ($subHiear) {
  677.                                 $haveDTN true;
  678.                             } else {
  679.                                 $haveDTN false;
  680.                             }
  681.                         } else {
  682.                             $haveDTN false;
  683.                         }
  684.                         $listeDisciplineLm $em->getRepository(RefDisciplineLm::class)->findBy(['projetLm' => $plm->getIdProjetLm()]);
  685.                         $listeDiscipline = [];
  686.                         foreach ($listeDisciplineLm as $data) {
  687.                             if ($data instanceof RefDisciplineLm) {
  688.                                 $listeDiscipline[] = $data->getDiscipline()->getLibelleDiscipline();
  689.                             }
  690.                         }
  691.                         $plmEc[] = [
  692.                             'dateEffet' => date_format($plm->getDateDebut(), "d/m/Y"),
  693.                             'dateFin' => $plm->getDateFin() ? date_format($plm->getDateFin(), "d/m/Y") : "",
  694.                             'cadreGeneral' => ($user['idOdmCadreGeneral'] ?? null),
  695.                             'texteDtn' => $plm->getContenuPrecisionDtn(),
  696.                             'textSupHierarchique' => $plm->getContenuPrecisionSH(),
  697.                             'adresseActivite' => $plm->getadresse_Activite(),
  698.                             'selectionLocalisation' => $plm->getLocalisation(),
  699.                             'libelle_selectionLocalisation' => $ReflocalPlm != null $ReflocalPlm->getLibelleAffectation() : "",
  700.                             'version' => $plm->getVersion(),
  701.                             'identifiant' => $plm->getIdProjetLm(),
  702.                             'libelleFop' => $plm->getIdFop()->getLibelleFop(),
  703.                             'idFop' => $plm->getIdFop()->getIdFop(),
  704.                             'idFo_complementaire' => $plm->getFonctComplementaire(),
  705.                             'libelleFo_complementaire' => $RefFopPlm != null $RefFopPlm->getLibelleFop() : "",
  706.                             'idLieu' => ($plm->getLieu()) != null $plm->getLieu()->getIdLieu() : "",
  707.                             'libelleLieu' => ($plm->getLieu()) != null $plm->getLieu()->getLibelleLieu() : "",
  708.                             'idDiscipline' => $listeDiscipline,
  709.                             'libelleWorkflow' => $plm->getIdWorkflow()->getLibelleAction(),
  710.                             'idWorkflow' => $plm->getIdWorkflow()->getIdWorkflow(),
  711.                             'link' => sha1($plm->getIdProjetLm()),
  712.                             'haveDTN' => $haveDTN,
  713.                             'recupLettre' => new \DateTime() >= $plm->getDate()->add($delai),
  714.                         ];
  715.                         $fops $em->getRepository(RefFop::class)->findAll();
  716.                         foreach ($fops as $fop) {
  717.                             if (!$fop->getDateDesactivation()) {
  718.                                 $libFop[] = ['idFop' => $fop->getIdFop(), 'libelleFop' => $fop->getLibelleFop()];
  719.                             }
  720.                         }
  721.                     }
  722.                 }
  723.                 $repositoryRefLieu $em->getRepository(RefLieu::class);
  724.                 $libLieu $repositoryRefLieu->findDonneesAdmin();
  725.                 $repositoryRefDiscipline $em->getRepository(RefDiscipline::class);
  726.                 $libDiscipline $repositoryRefDiscipline->findDonneesAdmin($user['idFederation']);
  727.                 $data = ["infoCts" => $infoCts"infosLmEc" => $infosLmEc"plmEc" => $plmEc"libellelieu" => $libLieu"libelleDiscipline" => $libDiscipline"fop" => $libFop];
  728.                 $success true;
  729.             } else {
  730.                 $data 'Id Plm Not Found';
  731.                 $success false;
  732.             }
  733.         } catch (\Exception $e) {
  734.             $success false;
  735.             $data $e->getMessage();
  736.         }
  737.         return $this->specializedJsonResponse->getJson($success$data);
  738.     }
  739.     private function getDtn($idFederation)
  740.     {
  741.         $em $this->doctrine->getManager();
  742.         $getIdUserForMyFede $em->getRepository(UtilisateurInformation::class)->findMyFede($idFederation);
  743.         return $getIdUserForMyFede;
  744.     }
  745.     private function createIdentifiantPLM($user$idUtilisateur)
  746.     {
  747.         $em $this->doctrine->getManager();
  748.         $currentDay = new \DateTime();
  749.         $userInformation $em->getRepository(UtilisateurInformation::class)
  750.             ->findOneBy(["idUtilisateur" => $idUtilisateur]);
  751.         $matricule $user->getPCivMatcle();
  752.         $name $userInformation->getNom() . '_' $userInformation->getPrenom();
  753.         $reference is_null($matricule) ? $name $matricule;
  754.         return $currentDay->format('Y-m-d') . '_' $reference;
  755.     }
  756.     #[Route(path'/api/save_plm'name'cts_web_insert_plm')]
  757.     public function CreatePlm(Request $request)
  758.     {
  759.         $success null;
  760.         $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  761.         $request->request->replace(is_array($data) ? $data : []);
  762.         $repositoryRefDiscipline $this->doctrine->getManager()->getRepository(RefDiscipline::class);
  763.         $projetLettreMission = new ProjetLettreMission();
  764.         $form $this->createForm(\App\Form\ProjetLettreMissionType::class, $projetLettreMission);
  765.         $form->handleRequest($request);
  766.         $em $this->doctrine->getManager();
  767.         try {
  768.             if ($form->isSubmitted() && $form->isValid()) {
  769.                 $requestForm $request->request->all();
  770.                 $idUtilisateur $requestForm['projet_lettre_mission']['idUser'];
  771.                 $user $em->getRepository(Utilisateur::class)->find($idUtilisateur);
  772.                 $projetLettreMission->setIdUtilisateur($user);
  773.                 $identifiantPlm $this->createIdentifiantPLM($user$idUtilisateur);
  774.                 $projetLettreMission->setIdentifiantPlm($identifiantPlm);
  775.                 if (isset($requestForm['projet_lettre_mission']['saisonSportive'])) {
  776.                     $projetLettreMission->setSaisonSportive($requestForm['projet_lettre_mission']['saisonSportive']);
  777.                 }
  778.                 if (isset($requestForm['projet_lettre_mission']['texteDtn'])) {
  779.                     $projetLettreMission->setContenuPrecisionDtn($requestForm['projet_lettre_mission']['texteDtn']);
  780.                 }
  781.                 if (isset($requestForm['projet_lettre_mission']['textSupHierarchique'])) {
  782.                     $projetLettreMission->setContenuPrecisionSH($requestForm['projet_lettre_mission']['textSupHierarchique']);
  783.                 }
  784.                 if (isset($requestForm['projet_lettre_mission']['adresseActivite'])) {
  785.                     $projetLettreMission->setAdresseActivite($requestForm['projet_lettre_mission']['adresseActivite']);
  786.                 }
  787.                 if (isset($requestForm['projet_lettre_mission']['selectionFonctComplementaire']) && isset($requestForm['projet_lettre_mission']['selectionFonctComplementaire']['idFop'])) {
  788.                     $projetLettreMission->setFonctComplementaire($requestForm['projet_lettre_mission']['selectionFonctComplementaire']['idFop']);
  789.                 }
  790.                 if (isset($requestForm['projet_lettre_mission']['selectionLocalisation']['id'])) {
  791.                     $projetLettreMission->setLocalisation($requestForm['projet_lettre_mission']['selectionLocalisation']['id']);
  792.                 }
  793.                 $projetLettreMission->setVersion(1);
  794.                 if ($requestForm['projet_lettre_mission']['idLieu'] != null) {
  795.                     $lieu $em->getRepository(RefLieu::class)->find($requestForm['projet_lettre_mission']['idLieu']);
  796.                     $projetLettreMission->setLieu($lieu);
  797.                 }
  798.                 $em->persist($projetLettreMission);
  799.                 $lettreMission $projetLettreMission->getIdLm();
  800.                 foreach ($requestForm['projet_lettre_mission']['idDiscipline'] as $idDiscipline) {
  801.                     $refDiscipline $repositoryRefDiscipline->find($idDiscipline);
  802.                     $refDisciplineLm = new RefDisciplineLm();
  803.                     $refDisciplineLm->setDiscipline($refDiscipline);
  804.                     $refDisciplineLm->setLettreMission($lettreMission);
  805.                     $refDisciplineLm->setProjetLm($projetLettreMission);
  806.                     $em->persist($refDisciplineLm);
  807.                 }
  808.                 $lastPlm $this->checkLastMission->getLastMission($user->getIdUtilisateur());
  809.                 if ($lastPlm && $lastPlm instanceof ProjetLettreMission) {
  810.                     $this->insertDataForLastMission($lastPlm$projetLettreMission);
  811.                     $this->insertDataForLastAutreMission($lastPlm$projetLettreMission);
  812.                 }
  813.                 $em->flush();
  814.                 $data = ["idPlm" => $projetLettreMission->getIdProjetLm()];
  815.                 $success true;
  816.             }
  817.         } catch (\Exception $e) {
  818.             $success false;
  819.             $data $e->getMessage();
  820.         }
  821.         return $this->specializedJsonResponse->getJson($success$data);
  822.     }
  823.     private function insertDataForLastMission(ProjetLettreMission $lastPlmProjetLettreMission $newProjetLettreMission)
  824.     {
  825.         $em $this->doctrine->getManager();
  826.         $insert false;
  827.         $repoRefActiviteRefSousAction $this->doctrine->getManager()->getRepository(RefActiviteRefSousAction::class);
  828.         foreach ($lastPlm->getMission() as $mission) {
  829.             if ($mission instanceof Mission) {
  830.                 $activite $repoRefActiviteRefSousAction->findOneBy(['idActivite' => $mission->getIdActivite()->getIdActivite()]);
  831.                 if ($activite) {
  832.                     $sousActionRefAction $em->getRepository(RefSousActionRefAction::class)->findOneBy(['idSousAction' => $activite->getIdSousAction()->getIdSousAction()]);
  833.                     if ($sousActionRefAction) {
  834.                         if ($activite->getActiviteActive() == true && $sousActionRefAction->getSousActionActive() == true) {
  835.                             $newActivite $mission->getIdActivite();
  836.                             $newMission = new Mission();
  837.                             $newMission->setIdProjetLm($newProjetLettreMission);
  838.                             $newMission->setIdActivite($newActivite);
  839.                             $newMission->setQuotiteRegionale($mission->getQuotiteRegionale());
  840.                             $newMission->setQuotiteNationale($mission->getQuotiteNationale());
  841.                             $em->persist($newMission);
  842.                             $insert true;
  843.                         }
  844.                     }
  845.                 }
  846.             }
  847.         }
  848.         foreach ($lastPlm->getPlmActInd() as $plmActInd) {
  849.             if ($plmActInd instanceof PlmActiviteIndic) {
  850.                 $activite $repoRefActiviteRefSousAction->findOneBy(['idActivite' => $plmActInd->getIdActivite()->getIdActivite()]);
  851.                 if ($activite) {
  852.                     $sousActionRefAction $em->getRepository(RefSousActionRefAction::class)->findOneBy(['idSousAction' => $activite->getIdSousAction()->getIdSousAction()]);
  853.                     if ($sousActionRefAction) {
  854.                         if ($activite->getActiviteActive() == true && $sousActionRefAction->getSousActionActive() == true) {
  855.                             $newActIndi = new PlmActiviteIndic();
  856.                             $newActIndi->setIdActivite($plmActInd->getIdActivite());
  857.                             $newActIndi->setIdIndicateur($plmActInd->getIdIndicateur());
  858.                             $newActIndi->setIdProjetLm($newProjetLettreMission);
  859.                             $em->persist($newActIndi);
  860.                             $insert true;
  861.                         }
  862.                     }
  863.                 }
  864.             }
  865.         }
  866.         foreach ($lastPlm->getPlmIndAutre() as $plmIndAutre) {
  867.             if ($plmIndAutre instanceof PlmIndicateurAutre) {
  868.                 $activite $repoRefActiviteRefSousAction->findOneBy(['idActivite' => $plmIndAutre->getIdActivite()->getIdActivite()]);
  869.                 if ($activite) {
  870.                     $sousActionRefAction $em->getRepository(RefSousActionRefAction::class)->findOneBy(['idSousAction' => $activite->getIdSousAction()->getIdSousAction()]);
  871.                     if ($sousActionRefAction) {
  872.                         if ($activite->getActiviteActive() == true && $sousActionRefAction->getSousActionActive() == true) {
  873.                             $newPlmIndiAutre = new PlmIndicateurAutre();
  874.                             $newPlmIndiAutre->setIdProjetLm($newProjetLettreMission);
  875.                             $newPlmIndiAutre->setIdActivite($plmIndAutre->getIdActivite());
  876.                             $em->persist($newPlmIndiAutre);
  877.                             $insert true;
  878.                             foreach ($plmIndAutre->getPlmActivteIndicAutre() as $plmActivteIndicAutre) {
  879.                                 if ($plmActivteIndicAutre instanceof PlmActiviteIndicAutre) {
  880.                                     $newPlmActiviteIndicAutre = new PlmActiviteIndicAutre();
  881.                                     $newPlmActiviteIndicAutre->setIdPlmIndAutre($newPlmIndiAutre);
  882.                                     $newPlmActiviteIndicAutre->setLibelleIndicateurAutre($plmActivteIndicAutre->getLibelleIndicateurAutre());
  883.                                     $newPlmActiviteIndicAutre->setIdActiviteIndicAutreParent($plmActivteIndicAutre->getIdActiviteIndicAutreParent());
  884.                                     $em->persist($newPlmActiviteIndicAutre);
  885.                                     $insert true;
  886.                                 }
  887.                             }
  888.                         }
  889.                     }
  890.                 }
  891.             }
  892.         }
  893.         return $insert;
  894.     }
  895.     private function insertDataForLastAutreMission(ProjetLettreMission $lastPlmProjetLettreMission $newProjetLettreMission)
  896.     {
  897.         $em $this->doctrine->getManager();
  898.         $insert false;
  899.         foreach ($lastPlm->getPlmActiviteAutre() as $plmActiviteAutre) {
  900.             if ($plmActiviteAutre instanceof PlmActiviteAutre) {
  901.                 if ($plmActiviteAutre->getIdSousAction()->getDateDesactivation() == null) {
  902.                     $newPlmActiviteAutre = new PlmActiviteAutre();
  903.                     $newPlmActiviteAutre->setIdProjetLm($newProjetLettreMission);
  904.                     $newPlmActiviteAutre->setIdAction($plmActiviteAutre->getIdAction());
  905.                     $newPlmActiviteAutre->setIdSousAction($plmActiviteAutre->getIdSousAction());
  906.                     $newPlmActiviteAutre->setLibelleActAutre($plmActiviteAutre->getLibelleActAutre());
  907.                     $newPlmActiviteAutre->setQuotiteRegAutre($plmActiviteAutre->getQuotiteRegAutre());
  908.                     $newPlmActiviteAutre->setQuotiteNatAutre($plmActiviteAutre->getQuotiteNatAutre());
  909.                     $em->persist($newPlmActiviteAutre);
  910.                     $insert true;
  911.                     foreach ($plmActiviteAutre->getPlmActivteAutreIndicAutre() as $plmActivteAutreIndicAutre) {
  912.                         if ($plmActivteAutreIndicAutre instanceof PlmActiviteAutreIndicAutre) {
  913.                             $newPlmActivteAutreIndicAutre = new PlmActiviteAutreIndicAutre();
  914.                         }
  915.                         $newPlmActivteAutreIndicAutre->setIdActAutre($newPlmActiviteAutre);
  916.                         $newPlmActivteAutreIndicAutre->setIdPlmActAutIndAutParent($plmActivteAutreIndicAutre->setIdPlmActAutIndAutParent());
  917.                         $newPlmActivteAutreIndicAutre->setLibelleIndAutreActAutre($plmActivteAutreIndicAutre->getLibelleIndAutreActAutre());
  918.                         $em->persist($newPlmActivteAutreIndicAutre);
  919.                         $insert true;
  920.                     }
  921.                 }
  922.             }
  923.         }
  924.         return $insert;
  925.     }
  926.     #[Route(path'/api/modify_plm'name'cts_web_update_plm')]
  927.     public function editPlm(Request $request)
  928.     {
  929.         try {
  930.             $referer strpos((string) $request->server->getHeaders()["REFERER"], "modifier");
  931.             $refererTableMission strpos((string) $request->server->getHeaders()["REFERER"], "tableau-des-missions");
  932.             $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  933.             $request->request->replace(is_array($data) ? $data : []);
  934.             $params $request->request->all();
  935.             $accessRuleService $this->accessRule;
  936.             $accessRuleService->readerFirewall();
  937.             $em $this->doctrine->getManager();
  938.             $projetLettreMission $em->getRepository(ProjetLettreMission::class)->find($params['projet_lettre_mission']['idPlm']);
  939.             $lmUtilisateur $em->getRepository(LettreMission::class)->find($projetLettreMission->getIdLm())->getIdUtilisateur()->getIdUtilisateur();
  940.             $lmUtilisateurInformation $em->getRepository(UtilisateurInformation::class)->findOneBy(["idUtilisateur" => $lmUtilisateur]);
  941.             $affectationLmUtilisateur = (null !== $lmUtilisateurInformation) ? $lmUtilisateurInformation->getIdAffectation()->getIdAffectation() : 0;
  942.             // CPO : Correction bug perte lieu #1
  943.             $lastIdWorkflow $projetLettreMission->getIdWorkflow()->getIdWorkflow();
  944.             $lieu $projetLettreMission->getLieu();
  945.             $foprinciId $params["projet_lettre_mission"]['idFop'];
  946.             if (isset($params["projet_lettre_mission"]['selectionFonctComplementaire']) && isset($params["projet_lettre_mission"]['selectionFonctComplementaire']['idFop'])) {
  947.                 $fopcompId $params["projet_lettre_mission"]['selectionFonctComplementaire']['idFop'];
  948.             } else {
  949.                 $fopcompId false;
  950.             }
  951.             $fopcomp $em->getRepository(RefFop::class)->findOneBy(["idFop" => $fopcompId]);
  952.             $foprinci $em->getRepository(RefFop::class)->findOneBy(["idFop" => $foprinciId]);
  953.             $editForm $this->createForm(\App\Form\ProjetLettreMissionType::class, $projetLettreMission);
  954.             $editForm->handleRequest($request);
  955.             // CPO : Correction bug perte lieu #2
  956.             $projetLettreMission->setLieu($lieu);
  957.             $newIdWorkFlow $params['projet_lettre_mission']['idWorkflow'];
  958.             $quickAction $params['projet_lettre_mission']['quickAction'] ?? false;
  959.             // Vérification Quotité et affectation nationale pour rédaction par DS
  960.             if (
  961.                 $newIdWorkFlow != $lastIdWorkflow &&
  962.                 ($newIdWorkFlow == Workflow::LM_ATTENTE_SIG)
  963.             ) {
  964.                 $checkMission $this->missionCheck->synthese($projetLettreMission->getIdProjetLm());
  965.                 if ($checkMission['totauxPlm'] != 100) {
  966.                     return $this->specializedJsonResponse->getJson(false$checkMission);
  967.                 }
  968.             } elseif (
  969.                 ($referer != false || $refererTableMission != false)
  970.                 && $newIdWorkFlow != $lastIdWorkflow
  971.                 && (($newIdWorkFlow == Workflow::LM_MODIF_DTN && $lastIdWorkflow != Workflow::LM_MODIF_SUP && $lastIdWorkflow != Workflow::LM_REDACTION_DS)
  972.                     || $newIdWorkFlow == Workflow::LM_MODIF_SUP)
  973.             ) {
  974.                 $checkMission $this->missionCheck->synthese($projetLettreMission->getIdProjetLm());
  975.                 if ($checkMission && $checkMission['totauxPlm'] != 100) {
  976.                     $checkMission "Les quotités correspondant Ã  cette mission doivent Ãªtre Ã©gale Ã  100% pour choisir ce statut";
  977.                     return $this->specializedJsonResponse->getJson(false$checkMission);
  978.                 }
  979.             } elseif (($newIdWorkFlow != $lastIdWorkflow) && ($newIdWorkFlow == Workflow::LM_REDACTION_DS && $affectationLmUtilisateur != 1)) {
  980.                 $checkMission "L'affectation de l'utilisateur doit Ãªtre nationale pour permettre ce changement d'état";
  981.                 return $this->specializedJsonResponse->getJson(false$checkMission);
  982.             }
  983.             // Signature LM
  984.             //  var_dump($newIdWorkFlow);
  985.             // die();
  986.             if ($newIdWorkFlow == Workflow::LM_SIGNEE && $newIdWorkFlow != $lastIdWorkflow) {
  987.                 $checkMission $this->missionCheck->synthese($projetLettreMission->getIdProjetLm());
  988.                 if ($checkMission['totauxPlm'] != 100) {
  989.                     return $this->specializedJsonResponse->getJson(false$checkMission);
  990.                 }
  991.                 try {
  992.                     $today = new \DateTime();
  993.                     $workflow $em->getRepository(Workflow::class)->find(Workflow::LM_SIGNEE);
  994.                     $idSignataire $this->getUser()->getUtilisateur()->getIdUtilisateur();
  995.                     //$signataire = $em->getRepository(Utilisateur::class)->find($idSignataire);
  996.                     $lm $em->getRepository(LettreMission::class)->find($projetLettreMission->getIdLm()->getIdLm());
  997.                     $affectation $em->getRepository(UtilisateurInformation::class)->findOneByIdUtilisateur($lmUtilisateur)->getIdAffectation()->getIdAffectation();
  998.                     if ($affectation != 1) {
  999.                         $drsignataire $em->getRepository(UtilisateurInformation::class)->findDrSuperieur($affectation);
  1000.                     } else {
  1001.                         $drsignataire $em->getRepository(UtilisateurInformation::class)->findDsSuperieur($affectation);
  1002.                     }
  1003.                     //$signataire = $em->getRepository(UtilisateurInformation::class)->findOneByIdUtilisateur($drsignataire);
  1004.                     $signataire $em->getRepository(Utilisateur::class)->find($drsignataire);
  1005.                     $projetLettreMission->setIdWorkflow($workflow);
  1006.                     $lm->setDateDeSignature($today);
  1007.                     $lm->setSignataire($signataire);
  1008.                     $em->persist($lm);
  1009.                     $em->flush();
  1010.                     $lmUtilisateurInformation->setIdFoprinci($foprinci);
  1011.                     $lmUtilisateurInformation->setIdFop($fopcomp);
  1012.                     $lmUtilisateurInformation->setIdLieu($lieu);
  1013.                     // notification 
  1014.                     $idUtilisateur $projetLettreMission->getIdUtilisateur();
  1015.                     $email $em->getRepository(Utilisateur::class)->findCourrielById($idUtilisateur)[0]['courriel'];
  1016.                     $mail $this->emailSHDecision->getMail(
  1017.                         EmailSHDecision::SIGNED,
  1018.                         EmailSHDecision::LM,
  1019.                         $email
  1020.                     );
  1021.                     if ($mail) {
  1022.                         $this->mailerInterface->send($mail);
  1023.                     }
  1024.                     $em->persist($lmUtilisateurInformation);
  1025.                     $em->flush();
  1026.                     $this->generateLmPdf->generatePdf($projetLettreMissionfalse$signataire);
  1027.                     $data 'Le changement de statut a Ã©té effectué avec succès';
  1028.                     $success true;
  1029.                 } catch (\Exception $e) {
  1030.                     $success false;
  1031.                     $data 'Une erreur se produit lors du changement de statut. Veuillez réessayer utérieurement'$e->getMessage();
  1032.                 }
  1033.             } else {
  1034.                 $idPlm $this->persistAndClone($projetLettreMission$params$quickAction);
  1035.                 $data $quickAction 'Le changement de statut a Ã©té effectué avec succès' $idPlm;
  1036.                 $success true;
  1037.             }
  1038.             $em->flush();
  1039.             //Envoi de mail au supérieur
  1040.             if (($newIdWorkFlow == Workflow::LM_MODIF_DTN) && ($newIdWorkFlow != $lastIdWorkflow)) {
  1041.                 $this->sendMailNotification();
  1042.             }
  1043.         } catch (\Exception $e) {
  1044.             $success false;
  1045.             $data $e->getMessage();
  1046.         }
  1047.         // var_dump( $this->specializedJsonResponse->getJson($success, $data)  );
  1048.         // die();
  1049.         return $this->specializedJsonResponse->getJson($success$data);
  1050.     }
  1051.     private function persistAndClone(ProjetLettreMission $projetLettreMission$params$quickAction false)
  1052.     {
  1053.         $em $this->doctrine->getManager();
  1054.         $lastWorkFlow $projetLettreMission->getIdWorkflow()->getIdWorkflow();
  1055.         if ($lastWorkFlow != $params['projet_lettre_mission']['idWorkflow']) {
  1056.             //Clonnage de l'ancien plm
  1057.             $newPlm $this->cloneLastPlm->clonePlm($params$projetLettreMission);
  1058.             if (($params['projet_lettre_mission']['idLieu'] != null) && !$quickAction) {
  1059.                 if ($newPlm instanceof ProjetLettreMission) {
  1060.                     $refLieu $em->getRepository(RefLieu::class)->find($params['projet_lettre_mission']['idLieu']);
  1061.                     $newPlm->setlieu($refLieu);
  1062.                 }
  1063.             }
  1064.             if (isset($params['projet_lettre_mission']['saisonSportive'])) {
  1065.                 $newPlm->setSaisonSportive($params['projet_lettre_mission']['saisonSportive']);
  1066.             }
  1067.             if (isset($params['projet_lettre_mission']['texteDtn'])) {
  1068.                 $newPlm->setContenuPrecisionDtn($params['projet_lettre_mission']['texteDtn']);
  1069.             }
  1070.             if (isset($params['projet_lettre_mission']['textSupHierarchique'])) {
  1071.                 $newPlm->setContenuPrecisionSH($params['projet_lettre_mission']['textSupHierarchique']);
  1072.             }
  1073.             if (isset($params['projet_lettre_mission']['adresseActivite'])) {
  1074.                 $newPlm->setAdresseActivite($params['projet_lettre_mission']['adresseActivite']);
  1075.             }
  1076.             if (isset($params['projet_lettre_mission']['selectionFonctComplementaire']['idFop'])) {
  1077.                 $newPlm->setFonctComplementaire($params['projet_lettre_mission']['selectionFonctComplementaire']['idFop']);
  1078.             }
  1079.             if (isset($params['projet_lettre_mission']['selectionLocalisation']['id'])) {
  1080.                 $newPlm->setLocalisation($params['projet_lettre_mission']['selectionLocalisation']['id']);
  1081.             }
  1082.             $em->persist($newPlm);
  1083.             $this->insertDataForLastMission($projetLettreMission$newPlm);
  1084.             $this->insertDataForLastAutreMission($projetLettreMission$newPlm);
  1085.             $idPlm $newPlm->getIdProjetLm();
  1086.             $lettreMission $projetLettreMission->getIdLm();
  1087.             if ($lettreMission instanceof LettreMission) {
  1088.                 if ($params['projet_lettre_mission']['idDiscipline'] != null) {
  1089.                     foreach ($params['projet_lettre_mission']['idDiscipline'] as $idDiscipline) {
  1090.                         $refDiscipline $em->getRepository(RefDiscipline::class)->find($idDiscipline);
  1091.                         $refDisciplineLm = new RefDisciplineLm();
  1092.                         $refDisciplineLm->setDiscipline($refDiscipline);
  1093.                         $refDisciplineLm->setLettreMission($lettreMission);
  1094.                         $refDisciplineLm->setProjetLm($newPlm);
  1095.                         $em->persist($refDisciplineLm);
  1096.                     }
  1097.                     //Duplication des anciennes disciplines
  1098.                 } else if ($quickAction) {
  1099.                     $listeDisciplineLm $em->getRepository(RefDisciplineLm::class)->findBy(['projetLm' => $projetLettreMission->getIdProjetLm()]);
  1100.                     foreach ($listeDisciplineLm as $data) {
  1101.                         if ($data instanceof RefDisciplineLm) {
  1102.                             $refDiscipline $data->getDiscipline();
  1103.                             $refDisciplineLm = new RefDisciplineLm();
  1104.                             $refDisciplineLm->setDiscipline($refDiscipline);
  1105.                             $refDisciplineLm->setLettreMission($lettreMission);
  1106.                             $refDisciplineLm->setProjetLm($newPlm);
  1107.                             $em->persist($refDisciplineLm);
  1108.                         }
  1109.                     }
  1110.                 }
  1111.             }
  1112.         } else {
  1113.             if ($params['projet_lettre_mission']['idLieu'] != null) {
  1114.                 if ($projetLettreMission instanceof ProjetLettreMission) {
  1115.                     $refLieu $em->getRepository(RefLieu::class)->find($params['projet_lettre_mission']['idLieu']);
  1116.                     $projetLettreMission->setlieu($refLieu);
  1117.                 }
  1118.             }
  1119.             $em->getRepository(RefDisciplineLm::class)->deleteDisciplineByPlm($projetLettreMission->getIdProjetLm());
  1120.             $lettreMission $projetLettreMission->getIdLm();
  1121.             if ($lettreMission instanceof LettreMission) {
  1122.                 foreach ($params['projet_lettre_mission']['idDiscipline'] as $idDiscipline) {
  1123.                     $refDiscipline $em->getRepository(RefDiscipline::class)->find($idDiscipline);
  1124.                     $refDisciplineLm = new RefDisciplineLm();
  1125.                     $refDisciplineLm->setDiscipline($refDiscipline);
  1126.                     $refDisciplineLm->setLettreMission($lettreMission);
  1127.                     $refDisciplineLm->setProjetLm($projetLettreMission);
  1128.                     $em->persist($refDisciplineLm);
  1129.                 }
  1130.             }
  1131.             if (isset($params['projet_lettre_mission']['saisonSportive'])) {
  1132.                 $projetLettreMission->setSaisonSportive($params['projet_lettre_mission']['saisonSportive']);
  1133.             }
  1134.             if (isset($params['projet_lettre_mission']['texteDtn'])) {
  1135.                 $projetLettreMission->setContenuPrecisionDtn($params['projet_lettre_mission']['texteDtn']);
  1136.             }
  1137.             if (isset($params['projet_lettre_mission']['textSupHierarchique'])) {
  1138.                 $projetLettreMission->setContenuPrecisionSH($params['projet_lettre_mission']['textSupHierarchique']);
  1139.             }
  1140.             if (isset($params['projet_lettre_mission']['adresseActivite'])) {
  1141.                 $projetLettreMission->setAdresseActivite($params['projet_lettre_mission']['adresseActivite']);
  1142.             }
  1143.             if (isset($params['projet_lettre_mission']['selectionFonctComplementaire']['idFop'])) {
  1144.                 $projetLettreMission->setFonctComplementaire($params['projet_lettre_mission']['selectionFonctComplementaire']['idFop']);
  1145.             }
  1146.             if (isset($params['projet_lettre_mission']['selectionLocalisation']['id'])) {
  1147.                 $projetLettreMission->setLocalisation($params['projet_lettre_mission']['selectionLocalisation']['id']);
  1148.             }
  1149.             $em->persist($projetLettreMission);
  1150.             $idPlm $projetLettreMission->getIdProjetLm();
  1151.         }
  1152.         return $idPlm;
  1153.     }
  1154.     private function persistAndCloneSignature(ProjetLettreMission $projetLettreMission$params)
  1155.     {
  1156.         $em $this->doctrine->getManager();
  1157.         $lastWorkFlow $projetLettreMission->getIdWorkflow()->getIdWorkflow();
  1158.         if ($lastWorkFlow != $params['idWorkflow']) {
  1159.             $newPlm $this->cloneLastPlm->clonePlmEtapePrecedente($params$projetLettreMission);
  1160.             $em->persist($newPlm);
  1161.             $this->insertDataForLastMission($projetLettreMission$newPlm);
  1162.             $this->insertDataForLastAutreMission($projetLettreMission$newPlm);
  1163.             $idPlm $newPlm->getIdProjetLm();
  1164.         } else {
  1165.             $em->persist($projetLettreMission);
  1166.             $idPlm $projetLettreMission->getIdProjetLm();
  1167.         }
  1168.         return $idPlm;
  1169.     }
  1170.     #[Route(path'/api/testSQL'name'cts_web_test_plm')]
  1171.     public function testSqlPlm()
  1172.     {
  1173.         $idPlmSource 20908;
  1174.         $idPlmComparer 21763;
  1175.         /** cas 1 */
  1176.         $idPlmSource 498;
  1177.         $idPlmComparer 19692;
  1178.         $idLm 279;
  1179.         /** cas 1 */
  1180.         /** cas 2 */
  1181.         $idPlmSource 17;
  1182.         $idPlmComparer 327;
  1183.         $idLm 16;
  1184.         /** cas 2 */
  1185.         /** cas 3 */
  1186.         //        $idPlmSource = 12646; // version 6
  1187.         $idPlmSource 2051// version 1
  1188.         //        $idPlmSource = 3202; // version 2
  1189.         //        $idPlmSource = 5904; // version 3
  1190.         //        $idPlmSource = 11306; // version 4
  1191.         //        $idPlmSource = 12634; // version 4
  1192.         //        $idPlmSource = 12646; // version 5
  1193.         //        $idPlmComparer = 16078; // version 7
  1194.         //        $idPlmSource = 2051; // version 7
  1195.         $idPlmComparer 16078// version 1
  1196.         //        $idPlmComparer = 2051;
  1197.         //        $idPlmSource = 16078;
  1198.         $idLm 741;
  1199.         /** cas 3 */
  1200.         //        $resultat = $this->missionCheck->syntheseComparaison($idPlmSource,$idPlmComparer);
  1201.         //        $resultat = $this->missionCheck->getContenuPlm(18052);
  1202.         //        $resultat = $this->missionCheck->getContenuPlm(21763);
  1203.         $resultat $this->missionCheck->comparaisonEntrePlm($idPlmSource$idPlmComparer$idLm);
  1204.     }
  1205.     #[Route(path'/api/getMissionPlm'name'cts_web_mission_plm')]
  1206.     public function getContenuPlm(Request $request)
  1207.     {
  1208.         $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  1209.         $request->request->replace(is_array($data) ? $data : []);
  1210.         $params $request->request->all();
  1211.         try {
  1212.             $contenuPlm $this->missionCheck->getContenuPlm($params['idPlm']);
  1213.             $synthese $this->missionCheck->synthese($params['idPlm']);
  1214.             $infoCts $this->missionCheck->infoUserPlm($params['idPlm']);
  1215.             $listeActiviteRef $this->missionCheck->getListeActivite($infoCts['infoCts']['idFederation'], $infoCts['infoCts']['idAffectation']);
  1216.             $data = ['contenuPlm' => $contenuPlm'synthese' => $synthese'link' => sha1((string) $params['idPlm']), 'infoCts' => $infoCts'listeActivite' => $listeActiviteRef];
  1217.             $success true;
  1218.         } catch (\Exception) {
  1219.             $success false;
  1220.             $data "Erreur de chargement";
  1221.         }
  1222.         return $this->specializedJsonResponse->getJson($success$data);
  1223.     }
  1224.     #[Route(path'/api/suppression_activite'name'cts_web_mission_suppression_activite')]
  1225.     public function supprimerActivite(Request $request)
  1226.     {
  1227.         $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  1228.         $request->request->replace(is_array($data) ? $data : []);
  1229.         $params $request->request->all();
  1230.         $accessRuleService $this->accessRule;
  1231.         $isReader $accessRuleService->isReader();
  1232.         $suppressionActivite $isReader false $this->missionCheck->supprimerActivite($params);
  1233.         if ($suppressionActivite) {
  1234.             $success true;
  1235.             $synthese $this->missionCheck->synthese($params['idPlm']);
  1236.             $contenuPlm $this->missionCheck->getContenuPlm($params['idPlm']);
  1237.             $data = ['contenuPlm' => $contenuPlm'synthese' => $synthese];
  1238.         } else {
  1239.             $success false;
  1240.             $data "Erreur de suppression !";
  1241.         }
  1242.         return $this->specializedJsonResponse->getJson($success$data);
  1243.     }
  1244.     #[Route(path'/api/ajout_activite'name'cts_web_mission_ajout_activite')]
  1245.     public function ajouterActivite(Request $request)
  1246.     {
  1247.         $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  1248.         $request->request->replace(is_array($data) ? $data : []);
  1249.         $params $request->request->all();
  1250.         $accessRuleService $this->accessRule;
  1251.         $isReader $accessRuleService->isReader();
  1252.         $ajoutActivites $isReader false $this->missionCheck->ajoutActivite($params);
  1253.         if ($ajoutActivites) {
  1254.             $success true;
  1255.             $contenuPlm $this->missionCheck->getContenuPlm($params['idPlm']);
  1256.             $synthese $this->missionCheck->synthese($params['idPlm']);
  1257.             $data = ['contenuPlm' => $contenuPlm'synthese' => $synthese];
  1258.         } else {
  1259.             $success false;
  1260.             $data "Erreur de suppression !";
  1261.         }
  1262.         return $this->specializedJsonResponse->getJson($success$data);
  1263.     }
  1264.     /**
  1265.      *
  1266.      * @return JsonResponse
  1267.      */
  1268.     public function getDonneesComparePlmAction(Request $request)
  1269.     {
  1270.         $listVersionsSource = [];
  1271.         $listVersionsAComparer = [];
  1272.         $repositoryPLM $this->doctrine->getManager()->getRepository(ProjetLettreMission::class);
  1273.         $repositoryUi $this->doctrine->getManager()->getRepository(UtilisateurInformation::class);
  1274.         $repositoryLM $this->doctrine->getManager()->getRepository(LettreMission::class);
  1275.         $repositoryRA $this->doctrine->getManager()->getRepository(RefAction::class);
  1276.         $listPlm = [];
  1277.         $idUtilisateur $request->attributes->get('idPlm');
  1278.         try {
  1279.             $infoUser $repositoryUi->findDataForPageProfil($idUtilisateur);
  1280.             $dataInfoPlm $repositoryPLM->findProjetLettreMission($idUtilisateur);
  1281.             $lm $repositoryLM->find($dataInfoPlm['idLm']);
  1282.             $versionSource = [];
  1283.             $versionAComparer = [];
  1284.             $versionId = [];
  1285.             if ($lm instanceof LettreMission) {
  1286.                 foreach ($lm->getPlm() as $key => $plm) {
  1287.                     if ($plm instanceof ProjetLettreMission) {
  1288.                         $listVersionsSource[$key] = $listVersionsAComparer[$key] = $plm->getVersion();
  1289.                         if ($dataInfoPlm['version'] == $plm->getVersion()) {
  1290.                             $enCours $plm->getVersion() . " (En cours)";
  1291.                         } else {
  1292.                             $enCours $plm->getVersion();
  1293.                         }
  1294.                         $versionSource[] = ["id" => $plm->getIdProjetLm(), "version" => $enCours"selected" => ($dataInfoPlm['version'] == $plm->getVersion() ? 'true' 'false')];
  1295.                         $versionAComparer[] = ["id" => $plm->getIdProjetLm(), "version" => $enCours"selected" => ($dataInfoPlm['version'] - == $plm->getVersion() ? 'true' 'false')];
  1296.                         $versionId[$plm->getIdProjetLm()] = $plm->getVersion();
  1297.                     }
  1298.                     $plmActionsActivites[$plm->getIdProjetLm()] = $this->get("ctsweb_mission_service")->getContenuPlm($plm->getIdProjetLm());
  1299.                 }
  1300.                 array_multisort($listVersionsSourceSORT_ASC$versionSource);
  1301.                 array_multisort($listVersionsAComparerSORT_ASC$versionAComparer);
  1302.             }
  1303.             $synthese = [];
  1304.             foreach ($repositoryRA->findAll() as $action) {
  1305.                 $synthese[$action->getIdAction()] = ["idAction" => $action->getIdAction(), "libelleAction" => $action->getLibelleActionLong()];
  1306.             }
  1307.             foreach ($plmActionsActivites as $idPlm => $plm) {
  1308.                 $listPlm[] = $idPlm;
  1309.                 foreach ($synthese as $idAction => &$reste) {
  1310.                     $reste[$idPlm] = ["regional" => 0"national" => 0];
  1311.                 }
  1312.                 foreach ($plm as $libAction => $actions) {
  1313.                     foreach ($actions as $act) {
  1314.                         if (isset($act['action'])) {
  1315.                             $synthese[$act['action']][$idPlm]["regional"] += $act['quo_reg'];
  1316.                             $synthese[$act['action']][$idPlm]["national"] += $act['quo_nat'];
  1317.                         }
  1318.                     }
  1319.                 }
  1320.             }
  1321.             $data = ["infoCts" => $infoUser"infosLmEc" => $dataInfoPlm"versionSource" => $versionSource"versionAComparer" => $versionAComparer"versionId" => $versionId"synthese" => $synthese"comparaison" => ''];
  1322.             $return = ["success" => true"data" => $data];
  1323.         } catch (Exception $e) {
  1324.             $return = ["success" => false"data" => $e->getMessage()];
  1325.         }
  1326.         return new JsonResponse($return);
  1327.     }
  1328.     public function compareTable($listPlm$idLm)
  1329.     {
  1330.         $repositoryRA $this->doctrine->getManager()->getRepository(RefAction::class);
  1331.         $repositoryRSARA $this->doctrine->getManager()->getRepository(RefSousActionRefAction::class);
  1332.         $repositoryPLM $this->doctrine->getManager()->getRepository(ProjetLettreMission::class);
  1333.         $listeIndicateurAutre $repositoryPLM->getIndicateurAutreActiviteListPlm($listPlm);
  1334.         $listeActiviteReferentiel $repositoryPLM->getActiviteIndicateurReferentielListPlm($listPlm);
  1335.         $listeActiviteAutre $repositoryPLM->getIndicateurAutreActiviteAutreListPlm($listPlm);
  1336.         $synthese = [];
  1337.         $indicateurSortis = [];
  1338.         $activiteAutreSortis = [];
  1339.         $activitePere '';
  1340.         // Boucle sur les actions
  1341.         foreach ($repositoryRA->findBy([], ['idAction' => 'ASC']) as $action) {
  1342.             // Ajout des actions dans le tableau
  1343.             $synthese[$action->getIdAction()] = ["idAction" => $action->getIdAction(), "libelleAction" => $action->getLibelleActionLong(), "sousAction" => []];
  1344.             $sousActionList $repositoryRSARA->getSousActionsByAction($action->getIdAction());
  1345.             // Boucle sur les sous actions
  1346.             foreach ($sousActionList as $sousAction) {
  1347.                 // Si l'action est la bonne
  1348.                 if ($action->getIdAction() == $sousAction['idAction']) {
  1349.                     // Ajout des sous actions dans le tableau
  1350.                     $synthese[$action->getIdAction()]["sousAction"][$sousAction['idSousAction']] = ["libelleSousAction" => $sousAction['libelleSousActionLong'], "activite" => []];
  1351.                     // Boucle sur les activités du référentiel
  1352.                     foreach ($listeActiviteReferentiel as $activite) {
  1353.                         $activiteAjout $repositoryPLM->getActivitePlmVersionAjout($idLm$activite['id_activite']);
  1354.                         $activiteSuppr $repositoryPLM->getActivitePlmVersionSuppression($idLm$activite['id_activite']);
  1355.                         $indicateurAjout $repositoryPLM->getIndicateurPlmVersionAjout($activite['id_indicateur'], $idLm$activite['id_activite']);
  1356.                         $indicateurSuppr $repositoryPLM->getIndicateurPlmVersionSuppression($activite['id_indicateur'], $idLm$activite['id_activite']);
  1357.                         if ($action->getIdAction() == $activite['id_action']) {
  1358.                             if ($sousAction['idSousAction'] == $activite['id_sous_action'] && $action->getIdAction() == $activite['id_action']) {
  1359.                                 // Ajout des activités dans le tableau
  1360.                                 $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) . ""];
  1361.                             }
  1362.                             // Ajout des quotités dans le tableau sur chaque version du plm
  1363.                             if (!isset($synthese[$action->getIdAction()]["sousAction"][$activite['id_sous_action']]['activite'][$activite['id_activite']]['plm'][$activite['id_projet_lm']])) {
  1364.                                 $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"]];
  1365.                             }
  1366.                             // Ajout du libelle des indicateurs dans le tableau
  1367.                             if (!isset($synthese[$action->getIdAction()]["sousAction"][$activite['id_sous_action']]['activite'][$activite['id_activite']]['indicateur'][$activite['id_indicateur']])) {
  1368.                                 $synthese[$action->getIdAction()]["sousAction"][$activite['id_sous_action']]['activite'][$activite['id_activite']]['indicateur'][$activite['id_indicateur']] = ["libelleIndicateur" => $activite["lib_indicateur"], "versionAjout" => $indicateurAjout"versionSuppr" => $indicateurSuppr];
  1369.                             }
  1370.                             // Ajout des indicateurs hors référetiel dans le tableau
  1371.                             foreach ($listeIndicateurAutre as $activiteAutre) {
  1372.                                 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']])) {
  1373.                                     if (!isset($synthese[$action->getIdAction()]["sousAction"][$activite['id_sous_action']]['activite'][$activiteAutre['id_activite']]['indicateur'][$activiteAutre['id_parent']]) && !isset($indicateurSortis[$activiteAutre['id_parent']])) {
  1374.                                         $synthese[$action->getIdAction()]["sousAction"][$activite['id_sous_action']]['activite'][$activiteAutre['id_activite']]['indicateur'][$activiteAutre['id_plm_act_ind_autre']] = ["libelleIndicateur" => $activiteAutre["libelle_indicateur_autre"]];
  1375.                                     }
  1376.                                 } else {
  1377.                                     $indicateurSortis[$activiteAutre['id_plm_act_ind_autre']] = $activiteAutre["libelle_indicateur_autre"];
  1378.                                 }
  1379.                             }
  1380.                         }
  1381.                         unset($activiteAjout);
  1382.                         unset($activiteSuppr);
  1383.                     }
  1384.                     // Boucle sur les activités hors référentiel
  1385.                     foreach ($listeActiviteAutre as $activite) {
  1386.                         if ($action->getIdAction() == $activite['id_action']) {
  1387.                             if ($sousAction['idSousAction'] == $activite['id_sous_action'] && $action->getIdAction() == $activite['id_action']) {
  1388.                                 if (!isset($synthese[$action->getIdAction()]["sousAction"][$activite['id_sous_action']]['activite'][$activite['id_parent']])) {
  1389.                                     $activitePere $activite['id_activite'];
  1390.                                     $synthese[$action->getIdAction()]["sousAction"][$activite['id_sous_action']]['activite'][$activite['id_activite']] = ["libelleActivite" => $activite["libelle_activite"], "indicateur" => [], "plm" => []];
  1391.                                 } else {
  1392.                                     $activiteAutreSortis[$activitePere][] = $activite["id_activite"];
  1393.                                 }
  1394.                             }
  1395.                             // Ajout des quotités dans le tableau sur chaque version du plm
  1396.                             if (!isset($synthese[$action->getIdAction()]["sousAction"][$activite['id_sous_action']]['activite'][$activite['id_activite']]['plm'][$activite['id_projet_lm']])) {
  1397.                                 if (isset($activiteAutreSortis[$activitePere])) {
  1398.                                     $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"]];
  1399.                                 } else {
  1400.                                     $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"]];
  1401.                                 }
  1402.                             }
  1403.                             // Ajout du libelle des indicateurs dans le tableau
  1404.                             if (!isset($synthese[$action->getIdAction()]["sousAction"][$activite['id_sous_action']]['activite'][$activite['id_activite']]['indicateur'][$activite['id_indicateur']])) {
  1405.                                 $synthese[$action->getIdAction()]["sousAction"][$activite['id_sous_action']]['activite'][$activite['id_activite']]['indicateur'][$activite['id_indicateur']] = ["libelleIndicateur" => $activite["libelle_indicateur"]];
  1406.                             }
  1407.                             // Ajout des indicateurs hors référentiel dans le tableau
  1408.                             foreach ($listeIndicateurAutre as $activiteAutre) {
  1409.                                 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']])) {
  1410.                                     if (!isset($synthese[$action->getIdAction()]["sousAction"][$activite['id_sous_action']]['activite'][$activiteAutre['id_activite']]['indicateur'][$activiteAutre['id_parent']]) && !isset($indicateurSortis[$activiteAutre['id_parent']])) {
  1411.                                         $synthese[$action->getIdAction()]["sousAction"][$activite['id_sous_action']]['activite'][$activiteAutre['id_activite']]['indicateur'][$activiteAutre['id_plm_act_ind_autre']] = ["libelleIndicateur" => $activiteAutre["libelle_indicateur_autre"]];
  1412.                                     }
  1413.                                 } else {
  1414.                                     $indicateurSortis[$activiteAutre['id_plm_act_ind_autre']] = $activiteAutre["libelle_indicateur_autre"];
  1415.                                 }
  1416.                             }
  1417.                         }
  1418.                     }
  1419.                     // Suppression des sous actions sans activités pour la PLM
  1420.                     if (empty($synthese[$action->getIdAction()]["sousAction"][$sousAction['idSousAction']]['activite'])) {
  1421.                         unset($synthese[$action->getIdAction()]["sousAction"][$sousAction['idSousAction']]);
  1422.                     }
  1423.                 }
  1424.             }
  1425.         }
  1426.         return $synthese;
  1427.     }
  1428.     #[Route(path'/api/update_quotite'name'cts_web_mission_update_quotite')]
  1429.     public function updateQuotite(Request $request)
  1430.     {
  1431.         $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  1432.         $request->request->replace(is_array($data) ? $data : []);
  1433.         $params $request->request->all();
  1434.         $accessRuleService $this->accessRule;
  1435.         $isReader $accessRuleService->isReader();
  1436.         $updateQuotite $isReader false $this->missionCheck->updateQuotite($params);
  1437.         if ($updateQuotite) {
  1438.             $success true;
  1439.             $synthese $this->missionCheck->synthese($params['idPlm']);
  1440.             $data = ['synthese' => $synthese];
  1441.         } else {
  1442.             $success false;
  1443.             $data "Erreur lors de la mise Ã  jour des quotités !";
  1444.         }
  1445.         return $this->specializedJsonResponse->getJson($success$data);
  1446.     }
  1447.     #[Route(path'/api/raz_activite'name'cts_web_mission_raz_activite')]
  1448.     public function razActivite(Request $request)
  1449.     {
  1450.         $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  1451.         $request->request->replace(is_array($data) ? $data : []);
  1452.         $params $request->request->all();
  1453.         $raz $this->missionCheck->razActivites($params);
  1454.         if ($raz) {
  1455.             $success true;
  1456.             $synthese $this->missionCheck->synthese($params['idPlm']);
  1457.             $contenuPlm $this->missionCheck->getContenuPlm($params['idPlm']);
  1458.             $data = ['contenuPlm' => $contenuPlm'synthese' => $synthese];
  1459.         } else {
  1460.             $success false;
  1461.             $data "Erreur lors du RAZ !";
  1462.         }
  1463.         return $this->specializedJsonResponse->getJson($success$data);
  1464.     }
  1465.     #[Route(path'/api/enregistrer_act_par_lot'name'cts_web_act_par_lot_enregistrer')]
  1466.     public function enregistrerParLot(Request $request)
  1467.     {
  1468.         $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  1469.         $request->request->replace(is_array($data) ? $data : []);
  1470.         $params $request->request->all();
  1471.         $listeUserNewPlm $this->ajoutActiviteParLotParUser($params['listeUser']);
  1472.         if (isset($params['listePlm'])) {
  1473.             $listePlm $params['listePlm'];
  1474.         } else {
  1475.             $listePlm = [];
  1476.         }
  1477.         $params['listePlm'] = array_merge($listePlm$listeUserNewPlm);
  1478.         $success $this->missionCheck->enregistrementActiviteParLot($params);
  1479.         if ($success) {
  1480.             $data "Enregistrement réussi !";
  1481.         } else {
  1482.             $data "Erreur das l'enregistrement !";
  1483.         }
  1484.         return $this->specializedJsonResponse->getJson($success$data);
  1485.     }
  1486.     /**
  1487.      *
  1488.      * @param type $listeIdUser
  1489.      * @return type
  1490.      */
  1491.     private function ajoutActiviteParLotParUser($listeIdUser)
  1492.     {
  1493.         $em $this->doctrine->getManager();
  1494.         $listePlmNew = [];
  1495.         $dateCourante = new \DateTime();
  1496.         $user $this->getUser()->getUtilisateur()->getIdRole();
  1497.         switch ($user) {
  1498.             case 1:
  1499.             case 3:
  1500.             case 10:
  1501.                 $idWorkflow 14;
  1502.                 break;
  1503.             case 5:
  1504.             case 8:
  1505.                 $idWorkflow 2;
  1506.                 break;
  1507.         }
  1508.         foreach ($listeIdUser as $idUser) {
  1509.             $lastPlm $this->checkLastMission->getLastMission($idUser);
  1510.             $fromOldPlm false;
  1511.             if ($lastPlm) {
  1512.                 $dateChangement $lastPlm->getIdLm()->getDateChangementAdministratif();
  1513.                 $fromOldPlm $dateChangement $dateChangement $dateCourante true;
  1514.             }
  1515.             if ($fromOldPlm) {
  1516.                 $idFop $lastPlm->getIdFop()->getIdFop();
  1517.                 $texteDtn $lastPlm->getContenuPrecisionDtn();
  1518.                 $textSupHierarchique $lastPlm->getContenuPrecisionSH();
  1519.                 $lieu $lastPlm->getLieu();
  1520.                 $discipline $lastPlm->getDiscipline();
  1521.                 $params = [];
  1522.                 $params['projet_lettre_mission']['dateDebut'] = $dateCourante->format("Y/m/d");
  1523.                 $params['projet_lettre_mission']['dateFin'] = null;
  1524.                 $params['projet_lettre_mission']['idWorkflow'] = $idWorkflow;
  1525.                 $params['projet_lettre_mission']['idFop'] = $idFop;
  1526.                 $params['projet_lettre_mission']['texteDtn'] = $texteDtn;
  1527.                 $params['projet_lettre_mission']['textSupHierarchique'] = $textSupHierarchique;
  1528.                 $params['projet_lettre_mission']['idLieu'] = $lieu;
  1529.                 $params['projet_lettre_mission']['idDiscipline'] = $discipline;
  1530.                 $idPlm $this->persistAndClone($lastPlm$params);
  1531.                 $listePlmNew[] = $idPlm;
  1532.                 $em->flush();
  1533.             } else {
  1534.                 $projetLettreMission = new ProjetLettreMission();
  1535.                 $user $em->getRepository(Utilisateur::class)->find($idUser);
  1536.                 $projetLettreMission->setIdUtilisateur($user);
  1537.                 $identifiantPlm $this->createIdentifiantPLM($user$idUser);
  1538.                 $fop $em->getRepository(RefFop::class)->find(4);
  1539.                 $workflow $em->getRepository(Workflow::class)->find($idWorkflow);
  1540.                 $projetLettreMission->setIdentifiantPlm($identifiantPlm);
  1541.                 $projetLettreMission->setDateDebut($dateCourante);
  1542.                 $projetLettreMission->setDateFin(null);
  1543.                 $projetLettreMission->setIdFop($fop);
  1544.                 $projetLettreMission->setSaisonSportive(1);
  1545.                 $projetLettreMission->setVersion(1);
  1546.                 $projetLettreMission->setDroitCts(1);
  1547.                 $projetLettreMission->setDate($dateCourante);
  1548.                 $projetLettreMission->setIdWorkflow($workflow);
  1549.                 $em->persist($projetLettreMission);
  1550.                 $lm = new LettreMission();
  1551.                 $lm->setDateFin(null);
  1552.                 $lm->setDateDebut($dateCourante);
  1553.                 $lm->setIdUtilisateur($user);
  1554.                 $lm->setIdOlympiade(1);
  1555.                 $lm->setIdFop($fop);
  1556.                 $em->persist($lm);
  1557.                 $projetLettreMission->setIdLm($lm);
  1558.                 $em->flush();
  1559.                 $listePlmNew[] = $projetLettreMission->getIdProjetLm();
  1560.             }
  1561.         }
  1562.         return $listePlmNew;
  1563.     }
  1564.     #[Route(path'/api/supprimer_act_par_lot'name'cts_web_act_par_lot_supprimer')]
  1565.     public function suppressionActiviteParLot(Request $request)
  1566.     {
  1567.         $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  1568.         $request->request->replace(is_array($data) ? $data : []);
  1569.         $params $request->request->all();
  1570.         $contenuApresSuppression $this->missionCheck->suppressionActiviteParlot($params);
  1571.         return $this->specializedJsonResponse->getJson(true$contenuApresSuppression);
  1572.     }
  1573.     #[Route(path'/api/ajout_act_par_lot'name'cts_web_act_par_lot_ajouter')]
  1574.     public function ajoutActiviteParLot(Request $request)
  1575.     {
  1576.         $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  1577.         $request->request->replace(is_array($data) ? $data : []);
  1578.         $params $request->request->all();
  1579.         $contenuApresAjout $this->missionCheck->ajoutActiviteParLot($params);
  1580.         return $this->specializedJsonResponse->getJson(true$contenuApresAjout);
  1581.     }
  1582.     #[Route(path'/api/init_act_par_lot'name'cts_web_act_par_lot_init')]
  1583.     public function initialisationActviteParLot(Request $request)
  1584.     {
  1585.         $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  1586.         $request->request->replace(is_array($data) ? $data : []);
  1587.         $params $request->request->all();
  1588.         $federation $this->getUser()->getIdFederation();
  1589.         $affectation $this->getUser()->getIdAffectation();
  1590.         $idFederation is_null($federation) ? null $federation->getIdFederation();
  1591.         $listeActiviteRef $this->missionCheck->getListeActivite($idFederation$affectation->getIdAffectation());
  1592.         $initActParLot $this->missionCheck->initActiviteParLot();
  1593.         $data = ['contenuPlm' => $initActParLot'listeActivite' => $listeActiviteRef];
  1594.         return $this->specializedJsonResponse->getJson(true$data);
  1595.     }
  1596.     #[Route(path'/api/init_indicateur'name'cts_web_mission_indicateur_init')]
  1597.     public function initIndicateur(Request $request)
  1598.     {
  1599.         $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  1600.         $request->request->replace(is_array($data) ? $data : []);
  1601.         $params $request->request->all();
  1602.         $listeIndicateur $this->missionCheck->initListeIndicateur($params);
  1603.         return $this->specializedJsonResponse->getJson(true$listeIndicateur);
  1604.     }
  1605.     #[Route(path'/api/ajout_indicateur'name'cts_web_mission_ajout_indicateur')]
  1606.     public function gestionIndicateur(Request $request)
  1607.     {
  1608.         $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  1609.         $request->request->replace(is_array($data) ? $data : []);
  1610.         $params $request->request->all();
  1611.         $gestionIndicateur $this->missionCheck->gestionListeIndicateurs($params);
  1612.         if ($gestionIndicateur) {
  1613.             $success true;
  1614.             $contenuPlm $this->missionCheck->getContenuPlm($params['idPlm']);
  1615.             $data = ['contenuPlm' => $contenuPlm];
  1616.         } else {
  1617.             $success false;
  1618.             $data "Erreur durant l'enregistrement !";
  1619.         }
  1620.         return $this->specializedJsonResponse->getJson($success$data);
  1621.     }
  1622.     public function getListePlmAction()
  1623.     {
  1624.         $params = [];
  1625.         $role $this->getUser()->getUtilisateur()->getIdRole();
  1626.         $idFederation "";
  1627.         $idAffectation "";
  1628.         if ($role == 5) {
  1629.             $idFederation $this->getUser()->getIdFederation()->getIdFederation();
  1630.             $idAffectation $this->getUser()->getIdAffectation()->getIdAffectation();
  1631.         }
  1632.         if ($role == 8) {
  1633.             $idFederation $this->getUser()->getIdFederation()->getIdFederation();
  1634.         }
  1635.         if ($role == 10 || $role == || $role == || $role == 11 || $role == 4) {
  1636.             $idAffectation $this->getUser()->getIdAffectation()->getIdAffectation();
  1637.         }
  1638.         $params['idUtilisateur'] = $this->getUser()->getIdUtilisateur();
  1639.         $params['role'] = $role;
  1640.         $params['affectation'] = $idAffectation;
  1641.         $params['federation'] = $idFederation;
  1642.         $resultat $this->plmService->getListePlm($params);
  1643.         return $this->specializedJsonResponse->getJson(true$resultat);
  1644.     }
  1645.     #[Route(path'/api/annulerPlm'name'cts_annuler_plm')]
  1646.     public function annulerPlm(Request $request)
  1647.     {
  1648.         $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  1649.         $request->request->replace(is_array($data) ? $data : []);
  1650.         $params $request->request->all();
  1651.         $accessRuleService $this->accessRule;
  1652.         $isReader $accessRuleService->isReader();
  1653.         $annulerPlm $isReader false $this->plmService->annulerPlm($params['idPlm']);
  1654.         if ($annulerPlm) {
  1655.             $success true;
  1656.             $data "PLM annulé avec succès";
  1657.         } else {
  1658.             $success false;
  1659.             $data "Erreur durant l'annulation de la PLM !";
  1660.         }
  1661.         return $this->specializedJsonResponse->getJson($success$data);
  1662.     }
  1663.     #[Route(path'/api/etapePrecedentePlm'name'cts_etape_precedente_plm')]
  1664.     public function etapePrecedentePlm(Request $request)
  1665.     {
  1666.         try {
  1667.             $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  1668.             $request->request->replace(is_array($data) ? $data : []);
  1669.             $params $request->request->all();
  1670.             $em $this->doctrine->getManager();
  1671.             $projetLettreMission $em->getRepository(ProjetLettreMission::class)->find($params['idPlm']);
  1672.             $role $this->getUser()->getUtilisateur()->getIdRole();
  1673.             $workflow $projetLettreMission->getIdWorkflow()->getIdWorkflow();
  1674.             if ((== $role || == $role) && == $workflow) {
  1675.                 $workflow $em->getRepository(Workflow::class)->find(4);
  1676.                 $projetLettreMission->setIdWorkflow($workflow);
  1677.                 $em->persist($projetLettreMission);
  1678.                 $em->flush();
  1679.                 $success true;
  1680.                 $data "Vous récupérez le PLM Ã  l'état en cours de modification par le DTN";
  1681.             } else {
  1682.                 $success false;
  1683.                 $data "Vous n'êtes pas authorisé a effectuer cette operation !";
  1684.             }
  1685.         } catch (Exception $e) {
  1686.             $success false;
  1687.             $data $e->getMessage();
  1688.         }
  1689.         return $this->specializedJsonResponse->getJson($success$data);
  1690.     }
  1691.     #[Route(path'/api/etapePrecedentePlmSignature'name'cts_etape_precedente_plm_signature')]
  1692.     public function etapePrecedentePlmSignature(Request $request)
  1693.     {
  1694.         try {
  1695.             $accessRuleService $this->accessRule;
  1696.             $accessRuleService->readerFirewall();
  1697.             $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  1698.             $request->request->replace(is_array($data) ? $data : []);
  1699.             $params $request->request->all();
  1700.             $em $this->doctrine->getManager();
  1701.             $projects = [];
  1702.             foreach ($params['listePlm'] as $key => $projet) {
  1703.                 $projetLettreMission $em->getRepository(ProjetLettreMission::class)->find($projet['idPlm']);
  1704.                 $editForm $this->createForm(\App\Form\ProjetLettreMissionType::class, $projetLettreMission);
  1705.                 $editForm->handleRequest($request);
  1706.                 $idPlm $this->persistAndCloneSignature($projetLettreMission$projet);
  1707.                 $em->flush();
  1708.                 $newProjetLettreMission $em->getRepository(ProjetLettreMission::class)->find($idPlm);
  1709.                 $newProjetLettreMission->setIdParentProjetLm($projet['idPlm']);
  1710.                 $em->persist($newProjetLettreMission);
  1711.                 $em->flush();
  1712.                 if ($newProjetLettreMission) {
  1713.                     $item = ['idParentPlm' => $projet['idPlm'], 'idPlm' => $idPlm];
  1714.                     $projects[] = $item;
  1715.                 }
  1716.             }
  1717.             $success true;
  1718.             $data = ["message" => "Vous récupérez le PLM Ã  l'état en cours de modification par le DTN""data" => $projects];
  1719.         } catch (\Exception $e) {
  1720.             $success false;
  1721.             $data $e->getMessage();
  1722.         }
  1723.         return $this->specializedJsonResponse->getJson($success$data);
  1724.     }
  1725.     /**
  1726.      * Initialise la comparaison
  1727.      */
  1728.     #[Route(path'/api/get_donnees_compare_plm/{idUser}'name'ctsweb_get_donnees_compare_plm')]
  1729.     public function initComparaisonPlm(Request $request)
  1730.     {
  1731.         $listVersionsSource = [];
  1732.         $listVersionsAComparer = [];
  1733.         $idPlmComparer null;
  1734.         $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  1735.         $request->request->replace(is_array($data) ? $data : []);
  1736.         $params $request->request->all();
  1737.         $repositoryUi $this->doctrine->getManager()->getRepository(UtilisateurInformation::class);
  1738.         $repositoryPLM $this->doctrine->getManager()->getRepository(ProjetLettreMission::class);
  1739.         $repositoryLM $this->doctrine->getManager()->getRepository(LettreMission::class);
  1740.         $idUtilisateur $request->attributes->get('idUser');
  1741.         $infoUser $repositoryUi->findDataForPageProfil($idUtilisateur);
  1742.         try {
  1743.             $dataInfoPlm $repositoryPLM->findProjetLettreMission($idUtilisateur);
  1744.             $lm $repositoryLM->find($dataInfoPlm['idLm']);
  1745.             $idLm $dataInfoPlm['idLm'];
  1746.             $versionSource = [];
  1747.             $versionAComparer = [];
  1748.             $idPlmSource null;
  1749.             if ($lm instanceof LettreMission) {
  1750.                 foreach ($lm->getPlm() as $key => $plm) {
  1751.                     if ($plm instanceof ProjetLettreMission) {
  1752.                         $listVersionsSource[$key] = $listVersionsAComparer[$key] = $plm->getVersion();
  1753.                         if ($dataInfoPlm['version'] == $plm->getVersion()) {
  1754.                             $enCours $plm->getVersion() . " (En cours)";
  1755.                             $idPlmComparer $plm->getIdProjetLm();
  1756.                         } else {
  1757.                             $enCours $plm->getVersion();
  1758.                         }
  1759.                         $versionSource[] = ["id" => $plm->getIdProjetLm(), "version" => $enCours"selected" => $dataInfoPlm['version'] - == $plm->getVersion()];
  1760.                         $versionAComparer[] = ["id" => $plm->getIdProjetLm(), "version" => $enCours"selected" => $dataInfoPlm['version'] == $plm->getVersion()];
  1761.                         if ($idPlmSource == null) {
  1762.                             if ($dataInfoPlm['version'] - == $plm->getVersion()) {
  1763.                                 $idPlmSource $plm->getIdProjetLm();
  1764.                             } else {
  1765.                                 $idPlmSource $plm->getIdParentProjetLm();
  1766.                             }
  1767.                         }
  1768.                     }
  1769.                 }
  1770.                 array_multisort($listVersionsSourceSORT_ASC$versionSource);
  1771.                 array_multisort($listVersionsAComparerSORT_ASC$versionAComparer);
  1772.                 array_splice($versionAComparer01);
  1773.                 array_pop($versionSource);
  1774.             }
  1775.             $synthese $this->missionCheck->syntheseComparaison($idPlmSource$idPlmComparer);
  1776.             $plmComparer $this->missionCheck->comparaisonEntrePlm($idPlmSource$idPlmComparer$idLm);
  1777.             $data = ["infoCts" => $infoUser"infosLmEc" => $dataInfoPlm"versionSource" => $versionSource"versionAComparer" => $versionAComparer"synthese" => $synthese"comparaison" => $plmComparer];
  1778.             $return = ["success" => true"data" => $data];
  1779.         } catch (\Exception $e) {
  1780.             $return = ["success" => false"data" => $e->getMessage()];
  1781.         }
  1782.         return new JsonResponse($return);
  1783.     }
  1784.     #[Route(path'/api/comparaison_plm'name'ctsweb_post_donnees_compare_plm')]
  1785.     public function comparaisonPlm(Request $request)
  1786.     {
  1787.         $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  1788.         $request->request->replace(is_array($data) ? $data : []);
  1789.         $params $request->request->all();
  1790.         $repositoryPLM $this->doctrine->getManager()->getRepository(ProjetLettreMission::class);
  1791.         $idUtilisateur $params['idUser'];
  1792.         $idPlmSource $params['idPlmSource'];
  1793.         $idPlmComparer $params['idPlmCompare'];
  1794.         try {
  1795.             $accessRuleService $this->accessRule;
  1796.             $accessRuleService->readerFirewall();
  1797.             $dataInfoPlm $repositoryPLM->findProjetLettreMission($idUtilisateur);
  1798.             $idLm $dataInfoPlm['idLm'];
  1799.             $synthese $this->missionCheck->syntheseComparaison($idPlmSource$idPlmComparer);
  1800.             $plmComparer $this->missionCheck->comparaisonEntrePlm($idPlmSource$idPlmComparer$idLm);
  1801.             $data = ["synthese" => $synthese"comparaison" => $plmComparer];
  1802.             $return = ["success" => true"data" => $data];
  1803.         } catch (\Exception $e) {
  1804.             $return = ["success" => false"data" => $e->getMessage()];
  1805.         }
  1806.         return new JsonResponse($return);
  1807.     }
  1808.     #[Route(path'/api/lmSigner/{projetLettreMission}'name'ctsweb_lmPdf'requirements: ['odm' => '\d+'])]
  1809.     public function generatePdfLm(ProjetLettreMission $projetLettreMission)
  1810.     {
  1811.         $em $this->doctrine->getManager();
  1812.         $utilisateur $em->getRepository(Utilisateur::class)->find(3971);
  1813.         $workflow $em->getRepository(Workflow::class)->find(7);
  1814.         $projetLettreMission->getIdLm()->setSignataire($utilisateur);
  1815.         $date = new \DateTime();
  1816.         $projetLettreMission->setIdWorkflow($workflow);
  1817.         $projetLettreMission->getIdLm()->setDateDeSignature($date);
  1818.         $em->persist($projetLettreMission);
  1819.         $em->flush();
  1820.         $response = new Response('LM signée');
  1821.         return $response;
  1822.     }
  1823.     #[Route(path'/api/pdfLmDownload/{projetLettreMission}/{link}'name'ctsweb_downlaodLmPdf'requirements: ['lettreMission' => '\d+'])]
  1824.     public function downloadPdfLm(ProjetLettreMission $projetLettreMission$link)
  1825.     {
  1826.         $path $this->getParameter('dir_file_lm');
  1827.         if ($projetLettreMission->getIdLm()->getSignataire() || $projetLettreMission->getIdWorkflow()->getIdWorkflow() == 7) {
  1828.             if (file_exists($path sha1($projetLettreMission->getIdLm()->getIdLm()) . '.pdf')) {
  1829.                 $content file_get_contents("$path{$link}.pdf"FILE_USE_INCLUDE_PATH);
  1830.                 $response = new \Symfony\Component\HttpFoundation\Response();
  1831.                 $response->headers->set('Content-Type''mime/type');
  1832.                 $response->headers->set('Content-Disposition'"attachment;filename=\"{$link}.pdf");
  1833.                 $response->setContent($content);
  1834.             } else {
  1835.                 $response = new Response('fichier introuvable sur le serveur');
  1836.             }
  1837.         } else {
  1838.             $content $this->generateLmPdf->generatePdf($projetLettreMissiontrue);
  1839.             $response = new Response(
  1840.                 $content,
  1841.                 Response::HTTP_OK,
  1842.                 ['Content-Type' => 'application/pdf''Content-Length' => strlen((string) $content), 'Content-Disposition' => "attachment;filename=\"{$link}.pdf"'Accept-Ranges' => 'bytes']
  1843.             );
  1844.         }
  1845.         return $response;
  1846.     }
  1847.     #[Route(path'/api/exportexcelplms'name'ctsweb_export_excel_plms')]
  1848.     public function exportExcelplms()
  1849.     {
  1850.         $listProjectLm $this->getListProjectLmByRole();
  1851.         $response $this->exportExcelLms->generateExcel($listProjectLm);
  1852.         $handle fopen('php://memory''r+');
  1853.         $fileName 'projetLm_' date('d_m_Y');
  1854.         rewind($handle);
  1855.         $dispositionHeader $response->headers->makeDisposition(
  1856.             ResponseHeaderBag::DISPOSITION_ATTACHMENT,
  1857.             $fileName '.xls'
  1858.         );
  1859.         $response->headers->set('Content-Type''text/vnd.ms-excel; charset=utf-8');
  1860.         $response->headers->set('Pragma''public');
  1861.         $response->headers->set('Cache-Control''maxage=1');
  1862.         $response->headers->set('Content-Disposition'$dispositionHeader);
  1863.         return $response;
  1864.     }
  1865.     #[Route(path'/api/exportexcel_lms'name'ctsweb_export_excel_lms')]
  1866.     public function exportExcel_lms()
  1867.     {
  1868.         $user $this->getUser();
  1869.         $listProjectLm $this->lmService->getLmInMyPerimeter(
  1870.             ['role' => $user->getUtilisateur()->getIdRole(), 'federation' => $user->getIdFederation(), 'affectation' => $user->getIdAffectation()]
  1871.         );
  1872.         $response $this->exportExcelLms->generateExcel_lm($listProjectLm);
  1873.         $handle fopen('php://memory''r+');
  1874.         $fileName 'LettreDeMission_' date('d_m_Y');
  1875.         rewind($handle);
  1876.         $dispositionHeader $response->headers->makeDisposition(
  1877.             ResponseHeaderBag::DISPOSITION_ATTACHMENT,
  1878.             $fileName '.xls'
  1879.         );
  1880.         $response->headers->set('Content-Type''text/vnd.ms-excel; charset=utf-8');
  1881.         $response->headers->set('Pragma''public');
  1882.         $response->headers->set('Cache-Control''maxage=1');
  1883.         $response->headers->set('Content-Disposition'$dispositionHeader);
  1884.         return $response;
  1885.     }
  1886.     #[Route(path'/api/checkQuotite'name'cts_web_control_upd')]
  1887.     public function compareVersionOfPlm(Request $request)
  1888.     {
  1889.         $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  1890.         $request->request->replace(is_array($data) ? $data : []);
  1891.         $params $request->request->all();
  1892.         $em $this->doctrine->getManager();
  1893.         $projetLettreMission $em->getRepository(ProjetLettreMission::class)->find($params['projet_lettre_mission']['idPlm']);
  1894.         $projetLettreMissionLast $em->getRepository(ProjetLettreMission::class)->getLastPlmForDtn($projetLettreMission->getIdLm());
  1895.         if ($projetLettreMissionLast && $projetLettreMission) {
  1896.             $checkActivite $this->checkListActivite($projetLettreMission$projetLettreMissionLast);
  1897.             $checkActiviteAutre $this->checkListAutreActivite($projetLettreMission$projetLettreMissionLast);
  1898.             $checkPlm $this->differenceBetweenTwoPlm($params['projet_lettre_mission'], $projetLettreMissionLast);
  1899.             if ($checkActivite == false || $checkActiviteAutre == false || $checkPlm == false) {
  1900.                 $checkList false;
  1901.             } else {
  1902.                 $checkList true;
  1903.             }
  1904.         } else {
  1905.             $checkList true;
  1906.         }
  1907.         return new JsonResponse(['data' => $checkList]);
  1908.     }
  1909.     private function checkListActivite(ProjetLettreMission $projetLettreMissionProjetLettreMission $projetLettreMissionLast)
  1910.     {
  1911.         $em $this->doctrine->getManager();
  1912.         $countListActivite 0;
  1913.         $counter 0;
  1914.         $nbMissionSend 0;
  1915.         foreach ($projetLettreMissionLast->getMission() as $mission) {
  1916.             if ($mission instanceof Mission) {
  1917.                 $listActivite $em->getRepository(RefActiviteRefSousAction::class)->findOneBy(['idActivite' => $mission->getIdActivite()->getIdActivite(), 'activiteActive' => true]);
  1918.                 if ($listActivite) {
  1919.                     $sousActionRefAction $em->getRepository(RefSousActionRefAction::class)->findOneBy(['idSousAction' => $listActivite->getIdSousAction()->getIdSousAction()]);
  1920.                     if ($sousActionRefAction->getSousActionActive() == true) {
  1921.                         $nbMissionSend += is_countable($listActivite) ? count($listActivite) : 0;
  1922.                     }
  1923.                 }
  1924.             }
  1925.         }
  1926.         $nbMissionStorage count($projetLettreMission->getMission());
  1927.         if ($nbMissionStorage != $nbMissionSend) {
  1928.             $counter++;
  1929.         } else {
  1930.             foreach ($projetLettreMission->getMission() as $mission) {
  1931.                 foreach ($projetLettreMissionLast->getMission() as $listMissionLast) {
  1932.                     if ($mission->getIdActivite()->getIdActivite() == $listMissionLast->getIdActivite()->getIdActivite()) {
  1933.                         $countListActivite++;
  1934.                         if (
  1935.                             $listMissionLast->getQuotiteNationale() != $mission->getQuotiteNationale() ||
  1936.                             $listMissionLast->getQuotiteRegionale() != $mission->getQuotiteRegionale()
  1937.                         ) {
  1938.                             $counter++;
  1939.                         }
  1940.                     }
  1941.                 }
  1942.             }
  1943.         }
  1944.         if (($countListActivite != $nbMissionStorage && $nbMissionStorage && $nbMissionStorage == $nbMissionSend) || $counter 0) {
  1945.             $data false;
  1946.         } else {
  1947.             $data true;
  1948.         }
  1949.         return $data;
  1950.     }
  1951.     private function checkListAutreActivite(ProjetLettreMission $projetLettreMissionProjetLettreMission $projetLettreMissionLast)
  1952.     {
  1953.         $countListActiviteAutre 0;
  1954.         $counterAutre 0;
  1955.         $nbMissionStorageAutre count($projetLettreMission->getPlmActiviteAutre());
  1956.         $nbMissionSendAutre count($projetLettreMissionLast->getPlmActiviteAutre());
  1957.         if ($nbMissionStorageAutre != $nbMissionSendAutre) {
  1958.             $counterAutre++;
  1959.         } else {
  1960.             foreach ($projetLettreMission->getPlmActiviteAutre() as $missionAutre) {
  1961.                 foreach ($projetLettreMissionLast->getPlmActiviteAutre() as $activiteAutre) {
  1962.                     if ($missionAutre->getIdAction() == $activiteAutre->getIdAction() && $missionAutre->getIdSousAction() == $activiteAutre->getIdSousAction() && $activiteAutre->getLibelleActAutre() == $activiteAutre->getLibelleActAutre()) {
  1963.                         $countListActiviteAutre++;
  1964.                         if (
  1965.                             $missionAutre->getQuotiteNatAutre() != $activiteAutre->getQuotiteNatAutre() ||
  1966.                             $missionAutre->getQuotiteRegAutre() != $activiteAutre->getQuotiteRegAutre()
  1967.                         ) {
  1968.                             $counterAutre++;
  1969.                         }
  1970.                     }
  1971.                 }
  1972.             }
  1973.         }
  1974.         if (
  1975.             ($countListActiviteAutre != $nbMissionStorageAutre && $nbMissionStorageAutre &&
  1976.                 $nbMissionStorageAutre == $nbMissionSendAutre) || $counterAutre 0
  1977.         ) {
  1978.             $data false;
  1979.         } else {
  1980.             $data true;
  1981.         }
  1982.         return $data;
  1983.     }
  1984.     private function differenceBetweenTwoPlm(array $listDataPostProjetLettreMission $projetLettreMissionLast)
  1985.     {
  1986.         $valid true;
  1987.         if ($projetLettreMissionLast->getDateDebut()->format('d/m/Y') != $listDataPost['dateDebut']) {
  1988.             $valid false;
  1989.         }
  1990.         if ($projetLettreMissionLast->getDateFin()->format('d/m/Y') != $listDataPost['dateFin']) {
  1991.             $valid false;
  1992.         }
  1993.         if ($projetLettreMissionLast->getIdFop()) {
  1994.             if ($projetLettreMissionLast->getIdFop()->getIdFop() != $listDataPost['idFop']) {
  1995.                 $valid false;
  1996.             }
  1997.         }
  1998.         if ($projetLettreMissionLast->getLieu()) {
  1999.             if ($projetLettreMissionLast->getLieu()->getIdLieu() != $listDataPost['idLieu']) {
  2000.                 $valid false;
  2001.             }
  2002.         }
  2003.         $listDiscipline $this->doctrine->getManager()->getRepository(RefDisciplineLm::class)
  2004.             ->getDisciplineByPlm($projetLettreMissionLast->getIdProjetLm());
  2005.         $totalDisplineStorage is_countable($listDiscipline) ? count($listDiscipline) : 0;
  2006.         $totalDisciplineSend is_countable($listDataPost['idDiscipline']) ? count($listDataPost['idDiscipline']) : 0;
  2007.         if ($totalDisplineStorage != $totalDisciplineSend) {
  2008.             $valid false;
  2009.         } else {
  2010.             if ($listDiscipline) {
  2011.                 $counte 0;
  2012.                 foreach ($listDiscipline as $disciplineStorage) {
  2013.                     foreach ($listDataPost['idDiscipline'] as $disciplineSend) {
  2014.                         if ($disciplineSend == $disciplineStorage['id_discipline']) {
  2015.                             $counte++;
  2016.                         }
  2017.                     }
  2018.                 }
  2019.                 if ($counte == $totalDisplineStorage) {
  2020.                     $valid true;
  2021.                 } else {
  2022.                     $valid false;
  2023.                 }
  2024.             } else {
  2025.                 $valid true;
  2026.             }
  2027.         }
  2028.         if ($projetLettreMissionLast->getContenuPrecisionDtn() != $listDataPost['texteDtn']) {
  2029.             $valid false;
  2030.         }
  2031.         if ($projetLettreMissionLast->getContenuPrecisionSH() != $listDataPost['textSupHierarchique']) {
  2032.             $valid false;
  2033.         }
  2034.         return $valid;
  2035.     }
  2036.     private function sendMailNotification()
  2037.     {
  2038.         $em $this->doctrine->getManager();
  2039.         $gabRep $em->getRepository(RefGabarit::class);
  2040.         $ui $this->getUser();
  2041.         $uid $this->getUser()->getUtilisateur()->getIdUtilisateur();
  2042.         $uimail $em->getRepository(Utilisateur::class)->findBy(['idUtilisateur' => $uid])[0]->getCourriel();
  2043.         $role $this->getUser()->getUtilisateur()->getIdRole();
  2044.         $subject sprintf('CTS-WEB : Lettre de Mission - %s %s'$ui->getNom(), $ui->getPrenom());
  2045.         $emailMailer $this->getParameter('mailer_user');
  2046.         $expediteurMail =  (filter_var($emailMailerFILTER_VALIDATE_EMAIL)) ? $emailMailer 'donotreply@sports.gouv.fr';
  2047.         //$host = $this->getParameter('host');
  2048.         $mail_contact null;
  2049.         $mail_ass_info $this->doctrine->getManager()->getRepository(ParametrageTexte::class)->getByCode('COURRIEL_ASSISTANCE_INFO');
  2050.         if ((is_countable($mail_ass_info) ? count($mail_ass_info) : 0) > 0)
  2051.             $mail_contact $mail_ass_info[0]->getTexte();
  2052.         if (RefRole::ROLE_FEDE === $role || RefRole::ROLE_FEDE_INVITE === $role || RefRole::ROLE_CTS === $role) {
  2053.             $federation $ui->getIdFederation()->getIdFederation();
  2054.             $affectation $ui->getIdAffectation()->getIdAffectation();
  2055.         } else {
  2056.             $federation null;
  2057.             $affectation $ui->getIdAffectation()->getIdAffectation();
  2058.         }
  2059.         $recipients $gabRep->emailNotification($federation$affectation'emailLm');
  2060.         // if (!filter_var($recipients, FILTER_VALIDATE_EMAIL)) {
  2061.         //     $recipients = [];
  2062.         // }
  2063.         if (!empty($recipients)) {
  2064.             $message = (new Email())
  2065.                 ->subject($subject)
  2066.                 ->from($expediteurMail)
  2067.                 ->to(...$recipients)
  2068.                 ->html(
  2069.                     $this->twig->render(
  2070.                         'Notification/notification_lm_dtn.html.twig',
  2071.                         ['host' => $mail_contact'civility' => $ui->getCivilite(), 'lastname' => $ui->getNom(), 'firstname' => $ui->getPrenom(), 'mailDemandeur' => $uimail]
  2072.                     ),
  2073.                     'text/html'
  2074.                 );
  2075.             $this->mailer->send($message);
  2076.         }
  2077.     }
  2078.     
  2079. }