src/Controller/AdministrationController.php line 2305

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\JsonResponse;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\HttpFoundation\ResponseHeaderBag;
  7. use Symfony\Component\Routing\Annotation\Route;
  8. use App\Entity\PlmActiviteIndicAutre;
  9. use App\Entity\RefActivite;
  10. use App\Entity\RefActiviteRefSousAction;
  11. use App\Entity\RefIndicateur;
  12. use App\Entity\RefIndicateurRefActivite;
  13. use App\Entity\RefRole;
  14. use App\Entity\RefPays;
  15. use App\Entity\RefFop;
  16. use App\Entity\RefLieu;
  17. use App\Entity\RefAction;
  18. use App\Entity\RefSousAction;
  19. use App\Entity\RefSousActionRefAction;
  20. use App\Entity\RefGabarit;
  21. use App\Entity\RefContinent;
  22. use App\Entity\RefOdmCadreGeneral;
  23. use App\Entity\Logo;
  24. use App\Entity\Aide;
  25. use App\Entity\RefDiscipline;
  26. use App\Entity\Mission;
  27. use App\Entity\Perimetre;
  28. use App\Entity\PlmActiviteIndic;
  29. use App\Entity\PlmIndicateurAutre;
  30. use App\Entity\PlmActiviteAutre;
  31. use App\Entity\PlmActiviteAutreIndicAutre;
  32. use App\Entity\Workflow;
  33. use App\Entity\RefAffectation;
  34. use App\Entity\Media;
  35. use App\Entity\RefCouleur;
  36. use App\Entity\Parametre;
  37. use App\Entity\Data;
  38. use App\Entity\RefFederation;
  39. use App\Entity\ProjetLettreMission;
  40. use App\Entity\Droit;
  41. use App\Entity\PerimetreRole;
  42. use App\Entity\RoleDroit;
  43. use App\Services\Lib\SpecializedJsonResponse;
  44. use App\Entity\RFederation;
  45. use App\Entity\RefPoste;
  46. use App\Entity\UtilisateurInformation;
  47. use Doctrine\Persistence\ManagerRegistry;
  48. use App\Services\ExportExcelLieu;
  49. use App\Services\ExportExcelFop;
  50. use App\Services\ExportExcel;
  51. use App\Services\ExportExcelDiscipline;
  52. use App\Services\CloneLastPlm;
  53. use App\Services\GenerateFileExcelIndicActivite;
  54. use App\Services\ExportExcelFederation;
  55. /**
  56.  * Administration controller.
  57.  *
  58.  */
  59. class AdministrationController extends AbstractController
  60. {
  61.     private ManagerRegistry $doctrine;
  62.     private SpecializedJsonResponse $specializedJsonResponse;
  63.     private ExportExcelLieu $exportLieu;
  64.     private ExportExcelFop $exportExcelFop;
  65.     private ExportExcel $exportExcel;
  66.     private ExportExcelDiscipline $exportExcelDiscipline;
  67.     private CloneLastPlm $cloneLastPlm;
  68.     private GenerateFileExcelIndicActivite $generateFileExcelIndicActivite;
  69.     private ExportExcelFederation $exportExcelFederation;
  70.     public function __construct(SpecializedJsonResponse $specializedJsonResponseManagerRegistry $doctrineExportExcelLieu $exportLieuExportExcel $exportExcelExportExcelFop $exportExcelFopExportExcelDiscipline $exportExcelDisciplineCloneLastPlm $cloneLastPlmGenerateFileExcelIndicActivite $generateFileExcelIndicActiviteExportExcelFederation $exportExcelFederation)
  71.     {
  72.         $this->doctrine $doctrine;
  73.         $this->specializedJsonResponse $specializedJsonResponse;
  74.         $this->exportLieu $exportLieu;
  75.         $this->exportExcel $exportExcel;
  76.         $this->exportExcelFop $exportExcelFop;
  77.         $this->exportExcelDiscipline $exportExcelDiscipline;
  78.         $this->cloneLastPlm $cloneLastPlm;
  79.         $this->generateFileExcelIndicActivite $generateFileExcelIndicActivite;
  80.         $this->exportExcelFederation $exportExcelFederation;
  81.     }
  82.     #[Route(path'/api/liste_filtre_onglet'name'cts_liste_filtre')]
  83.     public function listeForFiltre()
  84.     {
  85.         try {
  86.             $em $this->doctrine->getManager();
  87.             $repositoryRA $em->getRepository(RefAffectation::class);
  88.             $resultRa $repositoryRA->getAffectationEnabled();
  89.             $resultRa2 $repositoryRA->getAffectationAdmin();
  90.             $repositoryFed $em->getRepository(RFederation::class);
  91.             $resultFed $repositoryFed->getDisciplineList();
  92.             $resultatEtatOM = [];
  93.             $resultatEtatLM = [];
  94.             $resultatEtatFO = [];
  95.             $listeEtat $em->getRepository(Workflow::class)->findAll();
  96.             foreach ($listeEtat as $etat) {
  97.                 // filtre des annulations
  98.                 if ($etat->getIdWorkflow() === Workflow::LM_CREATION) {
  99.                     continue;
  100.                 }
  101.                 switch ($etat->getCategorie()) {
  102.                     case 'OM':
  103.                         $resultatEtatOM[] = ['id' => $etat->getIdWorkflow(), 'libelle' => $etat->getLibelleAction(), 'etape' => $etat->getEtape()];
  104.                         break;
  105.                     case 'LM':
  106.                         $resultatEtatLM[] = ['id' => $etat->getIdWorkflow(), 'libelle' => $etat->getLibelleAction(), 'etape' => $etat->getEtape()];
  107.                         break;
  108.                     case 'FO':
  109.                         $resultatEtatFO[] = ['id' => $etat->getIdWorkflow(), 'libelle' => $etat->getLibelleAction(), 'etape' => $etat->getEtape()];
  110.                         break;
  111.                 }
  112.             }
  113.             $region = [['id' => 1'libelle' => 'Om international'], ['id' => 2'libelle' => 'Om UE'], ['id' => 3'libelle' => 'Om France']];
  114.             $repositoryFop $em->getRepository(RefPoste::class);
  115.             $resultFop $repositoryFop->getListePoste();
  116.             $dataFiltre = ['affectation' => $resultRa'affectation_admin' => $resultRa2'federation' => $resultFed'fop' => $resultFop'etat' => $resultatEtatOM'statut' => $resultatEtatLM'region' => $region'status_formation' => $resultatEtatFO];
  117.             $success true;
  118.         } catch (\Exception $e) {
  119.             $success false;
  120.             $dataFiltre $e->getMessage();
  121.         }
  122.         return  $this->specializedJsonResponse->getJson($success$dataFiltre);
  123.     }
  124.     #[Route(path'/api/liste_filtre_onglet_lm'name'cts_liste_filtre_lm')]
  125.     public function listeForFiltreLM()
  126.     {
  127.         try {
  128.             $em $this->doctrine->getManager();
  129.             $repositoryRA $em->getRepository(RefAffectation::class);
  130.             $resultRa $repositoryRA->getAffectationEnabled();
  131.             $resultRa2 $repositoryRA->getAffectationAdmin();
  132.             $repositoryFed $em->getRepository(RFederation::class);
  133.             $resultFed $repositoryFed->getDisciplineList();
  134.             $resultatEtatOM = [];
  135.             $resultatEtatLM = [];
  136.             $listeEtat $em->getRepository(Workflow::class)->findAll();
  137.             foreach ($listeEtat as $etat) {
  138.                 // filtre des annulations
  139.                 if ($etat->getIdWorkflow() === Workflow::LM_CREATION || $etat->getIdWorkflow() === Workflow::LM_ANNULATION || $etat->getIdWorkflow() === Workflow::LM_SIGNEE) {
  140.                     continue;
  141.                 }
  142.                 switch ($etat->getCategorie()) {
  143.                     case 'OM':
  144.                         $resultatEtatOM[] = ['id' => $etat->getIdWorkflow(), 'libelle' => $etat->getLibelleAction(), 'etape' => $etat->getEtape()];
  145.                         break;
  146.                     case 'LM':
  147.                         $resultatEtatLM[] = ['id' => $etat->getIdWorkflow(), 'libelle' => $etat->getLibelleAction(), 'etape' => $etat->getEtape()];
  148.                         break;
  149.                 }
  150.             }
  151.             $region = [['id' => 1'libelle' => 'Om international'], ['id' => 2'libelle' => 'Om UE'], ['id' => 3'libelle' => 'Om France']];
  152.             $repositoryFop $em->getRepository(RefPoste::class);
  153.             $resultFop $repositoryFop->getListePoste();
  154.             $dataFiltre = ['affectation' => $resultRa'affectation_admin' => $resultRa2'federation' => $resultFed'fop' => $resultFop'etat' => $resultatEtatOM'statut' => $resultatEtatLM'region' => $region];
  155.             $success true;
  156.         } catch (\Exception $e) {
  157.             $success false;
  158.             $dataFiltre $e->getMessage();
  159.         }
  160.         return $this->specializedJsonResponse->getJson($success$dataFiltre);
  161.     }
  162.     #[Route(path'/api/admin/listeRegions'name'admin_liste_regions')]
  163.     public function ListeRegions()
  164.     {
  165.         try {
  166.             $repositoryRA $this->doctrine->getManager()->getRepository(RefAffectation::class);
  167.             $result $repositoryRA->findDonneesAdmin();
  168.             $data = ($result ?? []);
  169.             $success true;
  170.         } catch (\Exception $e) {
  171.             $success false;
  172.             $data $e->getMessage();
  173.             error_log($e->getMessage());
  174.         }
  175.         return $this->specializedJsonResponse->getJson($success$data);
  176.     }
  177.     /**
  178.      * Modifie le nom et le code d'une région.
  179.      */
  180.     #[Route(path'/api/admin/modifierRegion'name'admin_modifier_regions'methods: ['GET''POST'])]
  181.     public function ModifierRegion(Request $request)
  182.     {
  183.         $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  184.         $em $this->doctrine->getManager();
  185.         try {
  186.             $region $em->getRepository(RefAffectation::class)->findOneBy(['idAffectation' => $data['region']['id']]);
  187.             $region->setLibelleLong($data['region']['libelle'])
  188.                 ->setCodeRegion($data['region']['numero']);
  189.             $em->persist($region);
  190.             $em->flush();
  191.             $data = ['success' => true'data' => "Région modifiée"];
  192.         } catch (\Exception $e) {
  193.             $data = ['success' => false'data' => $e->getMessage()];
  194.         }
  195.         return new JsonResponse($data);
  196.     }
  197.     #[Route(path'/api/admin/listePays'name'admin_liste_pays')]
  198.     public function ListePays()
  199.     {
  200.         try {
  201.             $repositoryRP $this->doctrine->getManager()->getRepository(RefPays::class);
  202.             $listePays $repositoryRP->findDonneesAdmin();
  203.             $data = ['success' => true'data' => ($listePays ?? [])];
  204.         } catch (\Exception $e) {
  205.             $data = ['success' => false'data' => $e->getMessage()];
  206.         }
  207.         return new JsonResponse($data);
  208.     }
  209.     /**
  210.      * Modifie le nom et le code d'un pays.
  211.      */
  212.     #[Route(path'/api/admin/modifierPays'name'admin_modifier_pays'methods: ['GET''POST'])]
  213.     public function ModifierPays(Request $request)
  214.     {
  215.         $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  216.         $em $this->doctrine->getManager();
  217.         try {
  218.             $ancienPays $em->getRepository(RefPays::class)->findOneBy(['idPays' => $data['pays']['id']]);
  219.             $ancienPays->setDateDesactivation(new \DateTime());
  220.             $refPays = new RefPays();
  221.             $refPays->setLibellePays(ucwords((string) $data['pays']['libelle']))
  222.                 ->setCodeIso2(strtoupper((string) $data['pays']['iso2']))
  223.                 ->setCodeIso3(strtoupper((string) $data['pays']['iso3']))
  224.                 ->setCodeInterne($data['pays']['code'])
  225.                 ->setIdContinent($em->find(RefContinent::class, $data['pays']['continent']))
  226.                 ->setUnionEuropeenne($data['pays']['ue'])
  227.                 ->setDateActivation(new \DateTime());
  228.             $em->persist($ancienPays);
  229.             $em->persist($refPays);
  230.             $em->flush();
  231.             $data = ['success' => true'data' => "Pays modifié"];
  232.         } catch (\Exception $e) {
  233.             $data = ['success' => false'data' => $e->getMessage()];
  234.         }
  235.         return new JsonResponse($data);
  236.     }
  237.     #[Route(path'/api/admin/newPays'name'admin_ajouter_pays')]
  238.     public function AjouterPays(Request $request)
  239.     {
  240.         $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  241.         $em $this->doctrine->getManager();
  242.         try {
  243.             $refPays = new RefPays();
  244.             $nomsPays json_decode((string) $this->ListePays()->getContent(), null512JSON_THROW_ON_ERROR);
  245.             $listePaysBDD = [];
  246.             foreach ($nomsPays as $nomPays) {
  247.                 if ($nomPays !== true) {
  248.                     foreach ($nomPays as $paysvalues) {
  249.                         $listePaysBDD[] = $paysvalues->libellePays;
  250.                     }
  251.                 }
  252.             }
  253.             if (!in_array($data['pays']['libelle'], $listePaysBDD)) {
  254.                 $refPays->setLibellePays(ucwords((string) $data['pays']['libelle']))
  255.                     ->setCodeIso2(strtoupper((string) $data['pays']['iso2']))
  256.                     ->setCodeIso3(strtoupper((string) $data['pays']['iso3']))
  257.                     ->setCodeInterne($data['pays']['code'])
  258.                     ->setIdContinent($em->getRepository(RefContinent::class)->find($data['pays']['continent']))
  259.                     ->setUnionEuropeenne($data['pays']['ue'])
  260.                     ->setDateActivation(new \DateTime());
  261.                 $em->persist($refPays);
  262.                 $em->flush();
  263.                 $data = ['success' => true'data' => "Pays créé"];
  264.             } else {
  265.                 $data = ['success' => false'data' => "Ce pays est déjà enregistré"];
  266.             }
  267.         } catch (\Exception $e) {
  268.             $data = ['success' => false'data' => $e->getMessage()];
  269.         }
  270.         return new JsonResponse($data);
  271.     }
  272.     #[Route(path'/api/admin/supprimerPays/{id}'name'admin_supprimer_pays')]
  273.     public function SupprimerPays($id)
  274.     {
  275.         $em $this->doctrine->getManager();
  276.         try {
  277.             $pays $em->getRepository(RefPays::class)->findOneBy(['idPays' => $id]);
  278.             $pays->setDateDesactivation(new \DateTime());
  279.             $em->persist($pays);
  280.             $em->flush();
  281.             $data = ['success' => true'data' => 'Pays supprimé'];
  282.         } catch (\Exception $e) {
  283.             $data = ['success' => false'data' => $e->getMessage()];
  284.         }
  285.         return new JsonResponse($data);
  286.     }
  287.     #[Route(path'/api/admin/listeFop'name'admin_liste_fop')]
  288.     public function ListeFop()
  289.     {
  290.         try {
  291.             $repositoryRF $this->doctrine->getManager()->getRepository(RefFop::class);
  292.             $result $repositoryRF->findDonneesAdmin();
  293.             $data = ['success' => true'data' => $result];
  294.         } catch (\Exception $e) {
  295.             $data = ['success' => false'data' => $e->getMessage()];
  296.         }
  297.         return new JsonResponse($data);
  298.     }
  299.     /**
  300.      * Modifie le nom et le code d'un pays.
  301.      */
  302.     #[Route(path'/api/admin/modifierFop'name'admin_modifier_fop'methods: ['GET''POST'])]
  303.     public function ModifierFop(Request $request)
  304.     {
  305.         $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  306.         $em $this->doctrine->getManager();
  307.         try {
  308.             $fop $em->getRepository(RefFop::class)->findOneBy(['idFop' => $data['fop']['id']]);
  309.             if (strlen((string) $data['fop']['libelle']) <= 256) {
  310.                 $fop->setLibelleFop($data['fop']['libelle']);
  311.                 $em->persist($fop);
  312.                 $em->flush();
  313.                 $data "Fonctions Opérationnelles Principales créée";
  314.             } else {
  315.                 $data "La Fonctions Opérationnelles Principales ne peut pas dépasser 256 caractères";
  316.             }
  317.             $data = ['success' => true'data' => $data];
  318.         } catch (\Exception $e) {
  319.             $data = ['success' => false'data' => $e->getMessage()];
  320.         }
  321.         return new JsonResponse($data);
  322.     }
  323.     #[Route(path'/api/admin/newFop'name'admin_ajouter_fop')]
  324.     public function AjouterFop(Request $request)
  325.     {
  326.         $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  327.         $em $this->doctrine->getManager();
  328.         try {
  329.             $refFop = new RefFop();
  330.             if (strlen((string) $data['fop']['libelle']) <= 256) {
  331.                 $refFop->setLibelleFop($data['fop']['libelle']);
  332.                 $refFop->setDateActivation(new \DateTime());
  333.                 $em->persist($refFop);
  334.                 $em->flush();
  335.                 $data "Fonctions Opérationnelles Principales créée";
  336.             } else {
  337.                 $data "La Fonctions Opérationnelles Principales ne peut pas dépasser 256 caractères";
  338.             }
  339.             $data = ['success' => true'data' => $data];
  340.         } catch (\Exception $e) {
  341.             $data = ['success' => false'data' => $e->getMessage()];
  342.         }
  343.         return new JsonResponse($data);
  344.     }
  345.     #[Route(path'/api/admin/supprimerFop/{id}'name'admin_supprimer_fop')]
  346.     public function SupprimerFop($id)
  347.     {
  348.         $em $this->doctrine->getManager();
  349.         $fop $em->getRepository(RefFop::class)->findOneBy(['idFop' => $id]);
  350.         try {
  351.             $fop->setDateDesactivation(new \DateTime());
  352.             $fop->setDateActivation(null);
  353.             $em->persist($fop);
  354.             $em->flush();
  355.             $data = ['success' => true'data' => 'FOP supprimée'];
  356.         } catch (\Exception $e) {
  357.             $data = ['success' => false'data' => $e->getMessage()];
  358.         }
  359.         return new JsonResponse($data);
  360.     }
  361.     #[Route(path'/api/export_all_lieu'name'cts_web_lieu_export')]
  362.     public function exportLieu()
  363.     {
  364.         $em $this->doctrine->getManager();
  365.         $lieus $em->getRepository(RefLieu::class)->findAll();
  366.         $response $this->exportLieu->generateExcel($lieus);
  367.         $handle fopen('php://memory''r+');
  368.         $fileName 'Export-Lieu';
  369.         rewind($handle);
  370.         $dispositionHeader $response->headers->makeDisposition(
  371.             ResponseHeaderBag::DISPOSITION_ATTACHMENT,
  372.             $fileName '.xls'
  373.         );
  374.         $response->headers->set('Content-Type''text/vnd.ms-excel; charset=utf-8');
  375.         $response->headers->set('Pragma''public');
  376.         $response->headers->set('Cache-Control''maxage=1');
  377.         $response->headers->set('Content-Disposition'$dispositionHeader);
  378.         return $response;
  379.     }
  380.     #[Route(path'/api/export_all_actions'name'cts_web_actions_export')]
  381.     public function exportactions()
  382.     {
  383.         $em $this->doctrine->getManager();
  384.         $actions $em->getRepository(RefAction::class)->findAll();
  385.         $response $this->exportExcel->generateExcelActions($actions);
  386.         $handle fopen('php://memory''r+');
  387.         $fileName 'Export-Actions';
  388.         rewind($handle);
  389.         $dispositionHeader $response->headers->makeDisposition(
  390.             ResponseHeaderBag::DISPOSITION_ATTACHMENT,
  391.             $fileName '.xls'
  392.         );
  393.         $response->headers->set('Content-Type''text/vnd.ms-excel; charset=utf-8');
  394.         $response->headers->set('Pragma''public');
  395.         $response->headers->set('Cache-Control''maxage=1');
  396.         $response->headers->set('Content-Disposition'$dispositionHeader);
  397.         return $response;
  398.     }
  399.     #[Route(path'/api/export_all_fop'name'cts_web_fop_export')]
  400.     public function exportFop()
  401.     {
  402.         $em $this->doctrine->getManager();
  403.         $fops $em->getRepository(RefFop::class)->findAll();
  404.         $response $this->exportExcelFop->generateExcel($fops);
  405.         $handle fopen('php://memory''r+');
  406.         $fileName 'Export-Fop';
  407.         rewind($handle);
  408.         $dispositionHeader $response->headers->makeDisposition(
  409.             ResponseHeaderBag::DISPOSITION_ATTACHMENT,
  410.             $fileName '.xls'
  411.         );
  412.         $response->headers->set('Content-Type''text/vnd.ms-excel; charset=utf-8');
  413.         $response->headers->set('Pragma''public');
  414.         $response->headers->set('Cache-Control''maxage=1');
  415.         $response->headers->set('Content-Disposition'$dispositionHeader);
  416.         return $response;
  417.     }
  418.     #[Route(path'/api/export_all_sousactions'name'cts_web_sousactions_export')]
  419.     public function exportsousactions()
  420.     {
  421.         $em $this->doctrine->getManager();
  422.         $sousactions $em->getRepository(RefSousAction::class)->findAll();
  423.         $response $this->exportExcel->generateExcelSousActions($sousactions);
  424.         $handle fopen('php://memory''r+');
  425.         $fileName 'Export-Sous-Actions';
  426.         rewind($handle);
  427.         $dispositionHeader $response->headers->makeDisposition(
  428.             ResponseHeaderBag::DISPOSITION_ATTACHMENT,
  429.             $fileName '.xls'
  430.         );
  431.         $response->headers->set('Content-Type''text/vnd.ms-excel; charset=utf-8');
  432.         $response->headers->set('Pragma''public');
  433.         $response->headers->set('Cache-Control''maxage=1');
  434.         $response->headers->set('Content-Disposition'$dispositionHeader);
  435.         return $response;
  436.     }
  437.     #[Route(path'/api/action_admin_etat_supprimer'name'cts_web_action_etat')]
  438.     public function getListactionetat()
  439.     {
  440.         try {
  441.             $em $this->doctrine->getManager();
  442.             $result = [];
  443.             $actions $em->getRepository(RefAction::class)->findBy(['actionActive' => true], ["numAction" => "ASC"]);
  444.             foreach ($actions as $action) {
  445.                 $result[] = ["id" => $action->getIdAction(), "code" => $action->getLibelleActionCourt(), "libelle" => $action->getLibelleActionLong(), "numero" => $action->getNumAction(), "couleur" => $action->getColor()];
  446.             }
  447.             $data = ['success' => true'data' => $result];
  448.         } catch (\Exception $e) {
  449.             $data = ['success' => false'data' => $e->getMessage()];
  450.         }
  451.         return new JsonResponse($data);
  452.     }
  453.     #[Route(path'/api/action_admin_etat'name'cts_web_action_admin')]
  454.     public function getAllListe()
  455.     {
  456.         try {
  457.             $em $this->doctrine->getManager();
  458.             $result = [];
  459.             $actions $em->getRepository(RefAction::class)->findBy([], ["numAction" => "ASC"]);
  460.             foreach ($actions as $action) {
  461.                 $result[] = ["id" => $action->getIdAction(), "code" => $action->getLibelleActionCourt(), "libelle" => $action->getLibelleActionLong(), "numero" => $action->getNumAction(), "couleur" => $action->getColor(), "etat" => ($action->getActionActive()) ? true false"date_desactivation" => ''];
  462.             }
  463.             $data = ['success' => true'data' => $result];
  464.         } catch (\Exception $e) {
  465.             $data = ['success' => false'data' => $e->getMessage()];
  466.         }
  467.         return new JsonResponse($data);
  468.     }
  469.     #[Route(path'/api/liste_action_admin'name'admin_action_liste')]
  470.     public function listeAction()
  471.     {
  472.         $result = [];
  473.         try {
  474.             $repositoryRA $this->doctrine->getManager()->getRepository(RefAction::class);
  475.             $actions $repositoryRA->findBy(['actionActive' => true], ['numAction' => "ASC"]);
  476.             foreach ($actions as $action) {
  477.                 $result[] = ["id" => $action->getIdAction(), "code" => $action->getLibelleActionCourt(), "libelle" => $action->getLibelleActionLong(), "numero" => $action->getNumAction(), "couleur" => $action->getColor()];
  478.             }
  479.             $data = ['success' => true'data' => isset($result[0]) ? $result : []];
  480.         } catch (\Exception $e) {
  481.             $data = ['success' => false'data' => $e->getMessage()];
  482.         }
  483.         return new JsonResponse($data);
  484.     }
  485.     private function deleteActivity(RefAction $action)
  486.     {
  487.         $listSousAction $action->getIdSousAction();
  488.         $em $this->doctrine->getManager();
  489.         $date = new \DateTime();
  490.         foreach ($listSousAction as $sousAction) {
  491.             if ($sousAction instanceof RefSousAction) {
  492.                 $sousAction->setDateDesactivation($date);
  493.                 $em->persist($sousAction);
  494.                 $em->flush();
  495.             }
  496.         }
  497.     }
  498.     #[Route(path'/api/delete_action_admin/{id}'name'admin_action_delete')]
  499.     public function deleteAction($id)
  500.     {
  501.         $em $this->doctrine->getManager();
  502.         $action $em->getRepository(RefAction::class)->findOneBy(['idAction' => $id]);
  503.         try {
  504.             $action->setActionActive(false);
  505.             $this->deleteRefSousAction($action);
  506.             $em->persist($action);
  507.             $this->deleteActivity($action);
  508.             $em->flush();
  509.             $data = ['success' => true'data' => 'Action supprimée'];
  510.         } catch (\Exception $e) {
  511.             $data = ['success' => false'data' => $e->getMessage()];
  512.         }
  513.         return new JsonResponse($data);
  514.     }
  515.     private function deleteRefSousAction(RefAction $action)
  516.     {
  517.         $em $this->doctrine->getManager();
  518.         $lisRefSousActionAction $em->getRepository(RefSousActionRefAction::class)->findBy(['idAction' => $action->getIdAction()]);
  519.         foreach ($lisRefSousActionAction as $refActionSousAction) {
  520.             $refActionSousAction->setSousActionActive(false);
  521.             $refActionSousAction->setSousActionDateFin(new \DateTime('now'));
  522.             $em->persist($refActionSousAction);
  523.         }
  524.     }
  525.     #[Route(path'/api/change_color_action_admin/{id}/couleur/{couleur}'name'admin_action_change_color')]
  526.     public function changeColorAction($id$couleur)
  527.     {
  528.         $em $this->doctrine->getManager();
  529.         $action $em->getRepository(RefAction::class)->findOneBy(['idAction' => $id]);
  530.         try {
  531.             $action->setColor("#$couleur");
  532.             $em->persist($action);
  533.             $em->flush();
  534.             $data = ['success' => true'data' => 'Couleur modifiée'];
  535.         } catch (\Exception $e) {
  536.             $data = ['success' => false'data' => $e->getMessage()];
  537.         }
  538.         return new JsonResponse($data);
  539.     }
  540.     #[Route(path'/api/new_action_admin'name'admin_new_action')]
  541.     public function newAction(Request $request)
  542.     {
  543.         try {
  544.             $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  545.             $action = new RefAction();
  546.             $em $this->doctrine->getManager();
  547.             $oAction $em->getRepository(RefAction::class)->findOneBy(['numAction' => $data['action']['numero'], 'actionActive' => true]);
  548.             if (!$oAction) {
  549.                 $action->setColor($data['action']['couleur']);
  550.                 $action->setLibelleActionCourt(strtoupper((string) $data['action']['code']));
  551.                 $action->setLibelleActionLong($data['action']['libelle']);
  552.                 $action->setNumAction($data['action']['numero']);
  553.                 $em->persist($action);
  554.                 $em->flush();
  555.                 $data = ['success' => true'data' => 'Action créée'];
  556.             } else {
  557.                 $data = ['success' => false'data' => 'L\'action existe déjà'];
  558.             }
  559.         } catch (\Exception $e) {
  560.             $data = ['success' => false'data' => $e->getMessage()];
  561.         }
  562.         return new JsonResponse($data);
  563.     }
  564.     #[Route(path'/api/get_action_admin/{id}'name'admin_get_action')]
  565.     public function getAction($id)
  566.     {
  567.         $em $this->doctrine->getManager();
  568.         $action $em->getRepository(RefAction::class)->findOneBy(['idAction' => $id]);
  569.         try {
  570.             $actionAdmin = ["id" => $action->getIdAction(), "numero" => $action->getNumAction(), "libelle" => $action->getLibelleActionLong(), "code" => $action->getLibelleActionCourt(), "couleur" => $action->getColor()];
  571.             $data = ['success' => true'data' => $actionAdmin];
  572.         } catch (\Exception $e) {
  573.             $data = ['success' => false'data' => $e->getMessage()];
  574.         }
  575.         return new JsonResponse($data);
  576.     }
  577.     #[Route(path'/api/edit_action_admin'name'admin_edit_action')]
  578.     public function editAction(Request $request)
  579.     {
  580.         $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  581.         $em $this->doctrine->getManager();
  582.         $action $em->getRepository(RefAction::class)->findOneBy(['idAction' => $data['action']['id']]);
  583.         $action->setColor($data['action']['couleur'])
  584.             ->setLibelleActionCourt(strtoupper((string) $data['action']['code']))
  585.             ->setLibelleActionLong($data['action']['libelle'])
  586.             ->setNumAction($data['action']['numero']);
  587.         try {
  588.             $em->persist($action);
  589.             $em->flush();
  590.             $data = ['success' => true'data' => 'Action modifiée'];
  591.         } catch (\Exception $e) {
  592.             $data = ['success' => false'data' => $e->getMessage()];
  593.         }
  594.         return new JsonResponse($data);
  595.     }
  596.     #[Route(path'/api/new_sous_action_admin'name'admin_new_sous_action')]
  597.     public function newSousAction(Request $request)
  598.     {
  599.         $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  600.         $em $this->doctrine->getManager();
  601.         try {
  602.             $action $em->getRepository(RefAction::class)->findOneBy(['idAction' => $data['sousAction']['action']]);
  603.             $sousAction = new RefSousAction();
  604.             $sousAction->setLibelleSousActionCourt(strtoupper((string) $data['sousAction']['code']))
  605.                 ->setLibelleSousActionLong($data['sousAction']['libelle'])
  606.                 ->setPosition($data['sousAction']['position']);
  607.             $em->persist($sousAction);
  608.             $refSaction = new RefSousActionRefAction();
  609.             $refSaction->setIdAction($action)
  610.                 ->setSousActionActive(true)
  611.                 ->setSousActionDateDebut(new \DateTime())
  612.                 ->setIdSousAction($sousAction);
  613.             $em->persist($refSaction);
  614.             //Création d'une activité vide
  615.             //Activité
  616.             $refAffecNatinal 1;
  617.             $activite = new RefActivite();
  618.             $activite->setLibelleActivite('0-Aucune Action');
  619.             $activite->setMasquerLibelle(true);
  620.             $activite->setIdAffectation($refAffecNatinal);
  621.             $em->persist($activite);
  622.             //Indicateur
  623.             $indicateur = new RefIndicateur();
  624.             $indicateur->setLibelleIndicateur('');
  625.             $em->persist($indicateur);
  626.             $em->flush();
  627.             //Liaison activité - sous action - action
  628.             $activiteSousAction = new RefActiviteRefSousAction();
  629.             $activiteSousAction->setIdActivite($activite);
  630.             $activiteSousAction->setIdSousAction($sousAction);
  631.             $activiteSousAction->setIdAction($action);
  632.             $activiteSousAction->setActiviteActive(true);
  633.             $activiteSousAction->setActiviteDateDebut(new \DateTime());
  634.             $em->persist($activiteSousAction);
  635.             //Liaison activité - indicateur - sous action - action
  636.             $indicateurActivite = new RefIndicateurRefActivite();
  637.             $indicateurActivite->setIdActivite($activite->getIdActivite());
  638.             $indicateurActivite->setIdIndicateur($indicateur->getIdIndicateur());
  639.             $indicateurActivite->setIdSousAction($sousAction->getIdSousAction());
  640.             $indicateurActivite->setIdAction($action->getIdAction());
  641.             $indicateurActivite->setIndicateurActif(true);
  642.             $indicateurActivite->setIndicateurDateDebut(new \DateTime());
  643.             $em->persist($indicateurActivite);
  644.             $em->flush();
  645.             $data = ['success' => true'data' => 'Sous action créée'];
  646.         } catch (\Exception $e) {
  647.             $data = ['success' => false'data' => $e->getMessage()];
  648.         }
  649.         return new JsonResponse($data);
  650.     }
  651.     #[Route(path'/api/get_liste_sous_action_complete'name'admin_get_liste_sous_action_complete')]
  652.     public function getListeSousActionComplete()
  653.     {
  654.         $repositoryRSARA $this->doctrine->getManager()->getRepository(RefSousActionRefAction::class);
  655.         try {
  656.             foreach ($repositoryRSARA->getListeSousActionComplete() as $sousAction) {
  657.                 $sousActionComplete[] = ["id" => $sousAction["idSousAction"], "libelle" => $sousAction["libelleSousActionLong"]];
  658.             }
  659.             $data = ['success' => true'data' => $sousActionComplete];
  660.         } catch (\Exception $e) {
  661.             $data = ['success' => false'data' => $e->getMessage()];
  662.         }
  663.         return new JsonResponse($data);
  664.     }
  665.     #[Route(path'/api/delete_sous_action_admin/{id}'name'admin_sous_action_delete')]
  666.     public function deleteSousAction($id)
  667.     {
  668.         $em $this->doctrine->getManager();
  669.         $sousAction $em->getRepository(RefSousActionRefAction::class)->findOneBy(['idSousAction' => $id]);
  670.         $refSousAction $em->getRepository(RefSousAction::class)->findOneBy(['idSousAction' => $id]);
  671.         try {
  672.             $em->getRepository(RefSousActionRefAction::class)->updateSousActionByCodeAndAction($sousActionfalse);
  673.             $em->getRepository(RefSousAction::class)->updateSousAction($sousAction);
  674.             $plmRepo $em->getRepository(ProjetLettreMission::class);
  675.             $listeActivite $plmRepo->getActiviteBySousAction($id);
  676.             $activites = [];
  677.             foreach ($listeActivite as $activite) {
  678.                 $activites[] = $activite['id_activite'];
  679.             }
  680.             if (sizeof($activites) > 0) {
  681.                 $plmRepo->deleteActiviteToPlm($activites);
  682.             }
  683.             $listePlmActAutreInd $plmRepo->getActiviteAutreBySousAction($id);
  684.             $activitesAutre = [];
  685.             foreach ($listePlmActAutreInd as $actiAutre) {
  686.                 $plmRepo->deleteActiAutreIndic($actiAutre['id_act_autre']);
  687.                 if (!in_array($actiAutre['id_act_autre'], $activitesAutre)) {
  688.                     $activitesAutre[] = $actiAutre['id_act_autre'];
  689.                 }
  690.             }
  691.             $plmRepo->deleteActiviteAutreBySousAction($id);
  692.             $listePlm $plmRepo->plmEnCoursModifSupHierachiqueByActiAndSousAction($activites$id);
  693.             if (sizeof($listePlm) > 0) {
  694.                 $this->etapePrecedentePlmSuperieurHierachique($listePlm$activites$activitesAutre);
  695.             }
  696.             $data = ['success' => true'data' => 'Sous action supprimée'];
  697.         } catch (\Exception $e) {
  698.             $data = ['success' => false'data' => $e->getMessage()];
  699.         }
  700.         return new JsonResponse($data);
  701.     }
  702.     #[Route(path'/api/get_sous_action_admin/{id}'name'admin_get_sous_action')]
  703.     public function getSousAction($id)
  704.     {
  705.         $em $this->doctrine->getManager();
  706.         $sousAction $em->getRepository(RefSousAction::class)->findOneBy(['idSousAction' => $id]);
  707.         try {
  708.             $sousActionAdmin = ["id" => $sousAction->getIdSousAction(), "libelle" => $sousAction->getLibelleSousActionLong(), "code" => $sousAction->getLibelleSousActionCourt(), "position" => $sousAction->getPosition()];
  709.             $data = ['success' => true'data' => $sousActionAdmin];
  710.         } catch (\Exception $e) {
  711.             $data = ['success' => false'data' => $e->getMessage()];
  712.         }
  713.         return new JsonResponse($data);
  714.     }
  715.     #[Route(path'/api/edit_sous_action_admin'name'admin_edit_sous_action')]
  716.     public function editSousAction(Request $request)
  717.     {
  718.         $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  719.         $em $this->doctrine->getManager();
  720.         $sousAction $em->getRepository(RefSousAction::class)->findOneBy(['idSousAction' => $data['sousAction']['id']]);
  721.         $sousAction->setLibelleSousActionCourt(strtoupper((string) $data['sousAction']['code']))
  722.             ->setLibelleSousActionLong($data['sousAction']['libelle'])
  723.             ->setPosition($data['sousAction']['position']);
  724.         try {
  725.             $em->persist($sousAction);
  726.             $em->flush();
  727.             $data = ['success' => true'data' => 'Sous action modifiée'];
  728.         } catch (\Exception $e) {
  729.             $data = ['success' => false'data' => $e->getMessage()];
  730.         }
  731.         return new JsonResponse($data);
  732.     }
  733.     #[Route(path'/api/change_liste_sous_action'name'admin_change_liste_sous_action')]
  734.     public function changeListeSousAction(Request $request)
  735.     {
  736.         $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  737.         $listeSousAction $data['listeSousAction'];
  738.         $em $this->doctrine->getManager();
  739.         try {
  740.             for ($i 1$i <= (is_countable($listeSousAction) ? count($listeSousAction) : 0); $i++) {
  741.                 $sousAction $em->getRepository(RefSousAction::class)->findOneBy(['idSousAction' => $listeSousAction[$i 1]['idSousAction']]);
  742.                 $sousAction->setPosition($i);
  743.                 $em->persist($sousAction);
  744.                 $em->flush();
  745.             }
  746.             $data = ['success' => true'data' => 'Ordre des sous action modifiée'];
  747.         } catch (\Exception $e) {
  748.             $data = ['success' => false'data' => $e->getMessage()];
  749.         }
  750.         return new JsonResponse($data);
  751.     }
  752.     #[Route(path'/api/get_liste_continent'name'admin_get_liste_continent')]
  753.     public function getListeContinent()
  754.     {
  755.         $result = [];
  756.         try {
  757.             $repositoryRC $this->doctrine->getManager()->getRepository(RefContinent::class);
  758.             $continents $repositoryRC->findAll();
  759.             foreach ($continents as $continent) {
  760.                 $result[] = ["id" => $continent->getIdContinent(), "libelle" => $continent->getLibelleContinent()];
  761.             }
  762.             $data = ['success' => true'data' => $result];
  763.         } catch (\Exception $e) {
  764.             $data = ['success' => false'data' => $e->getMessage()];
  765.         }
  766.         return new JsonResponse($data);
  767.     }
  768.     #[Route(path'/api/get_adresse_gabarit'name'admin_get_adresse_gabarit')]
  769.     public function getAdresseGabarit()
  770.     {
  771.         $adresse null;
  772.         $em $this->doctrine->getManager();
  773.         $idUser $this->getUser()->getIdUtilisateur();
  774.         $refRole $this->getUser()->getUtilisateur()->getIdRole();
  775.         $affectation $this->getUser()->getIdAffectation();
  776.         $federation $this->getUser()->getIdFederation();
  777.         try {
  778.             $repositoryRG $this->doctrine->getManager()->getRepository(RefGabarit::class);
  779.             switch ($refRole) {
  780.                 case RefRole::ROLE_FEDE:
  781.                 case RefRole::ROLE_FEDE_INVITE:
  782.                     $adresse $repositoryRG->getDetailsGabaritDTN($federation->getIdFederation());
  783.                     break;
  784.                 case RefRole::ROLE_DS_ADMIN:
  785.                 case RefRole::ROLE_DS_INVITE:
  786.                 case RefRole::ROLE_DS_SIGNATAIRE:
  787.                     $adresse $repositoryRG->getDetailsGabaritDS();
  788.                     break;
  789.                 case RefRole::ROLE_DR_SIGNATAIRE:
  790.                 case RefRole::ROLE_DR:
  791.                     $adresse $repositoryRG->getDetailsGabaritDR($affectation->getIdAffectation());
  792.                     break;
  793.             }
  794.             if (!is_null($adresse) && !is_bool($adresse)) {
  795.                 $return = ["id" => $adresse->getIdGabarit(), "entete" => $adresse->getEntete(), "direction" => $adresse->getDirection(), "adresse" => $adresse->getAdresse(), "suite" => $adresse->getAdresseSuite(), "cp" => $adresse->getCp(), "ville" => $adresse->getVille(), "tel" => $adresse->getTel(), "fax" => $adresse->getFax(), "email" => $adresse->getEmail(), "emailOdm" => $adresse->getEmailOdm(), "emailConges" => $adresse->getEmailConges(), "emailLm" => $adresse->getEmailLm(), "emailFo" => $adresse->getEmailFo(), "logo" => $adresse->getLogo()];
  796.             } else {
  797.                 $return null;
  798.             }
  799.             $data = ['success' => true'data' => $return];
  800.         } catch (\Exception $e) {
  801.             $data = ['success' => false'data' => $e->getMessage()];
  802.         }
  803.         return new JsonResponse($data);
  804.     }
  805.     #[Route(path'/api/admin/newGabarit'name'admin_gabarit')]
  806.     public function newGabarit(Request $request)
  807.     {
  808.         $affectation null;
  809.         $federation null;
  810.         $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  811.         $user $this->getUser();
  812.         $userRole $user->getUtilisateur()->getIdRole();
  813.         $em $this->doctrine->getManager();
  814.         $repositoryRG $em->getRepository(RefGabarit::class);
  815.         switch ($userRole) {
  816.             case RefRole::ROLE_FEDE:
  817.             case RefRole::ROLE_FEDE_INVITE:
  818.                 $federation $this->getUser()->getIdFederation();
  819.                 $affectation $this->getUser()->getIdAffectation();
  820.                 break;
  821.             case RefRole::ROLE_DS_ADMIN:
  822.             case RefRole::ROLE_DS_INVITE:
  823.             case RefRole::ROLE_DS_SIGNATAIRE:
  824.             case RefRole::ROLE_DR_SIGNATAIRE:
  825.             case RefRole::ROLE_DR:
  826.                 $federation null;
  827.                 $affectation $this->getUser()->getIdAffectation();
  828.                 break;
  829.         }
  830.         /** 
  831.          * CTS-12 Valider la présence de ; et non de , 
  832.          */
  833.         $field_emails = ['email''emailOdm''emailConges''emailLm''emailFo'];
  834.         foreach ($field_emails as $field) {
  835.             if (isset($data['gabarit'][$field]) && !empty($data['gabarit'][$field])) {
  836.                 $matches = array();
  837.                 if (!preg_match_all("/^(([^;,]+)([;]\W)?)+$/"$data['gabarit'][$field], $matches)) {
  838.                     $data = array(
  839.                         'success' => false,
  840.                         'data' => 'Les adresses emails doivent Ãªtre séparées par un point-virgule et un espace.<br />'
  841.                     );
  842.                     return new JsonResponse($data);
  843.                 }
  844.             }
  845.         }
  846.         $postalCodePattern '/^(?:[0-8]\d|9[0-8])\d{3}$/';
  847.         if (isset($data['gabarit']['cp']) && !empty($data['gabarit']['cp'])) {
  848.             if (!preg_match($postalCodePattern$data['gabarit']['cp'])) {
  849.                 $data = array(
  850.                     'success' => false,
  851.                     'data' => 'Code postal invalide.<br />'
  852.                 );
  853.                 return new JsonResponse($data);
  854.             }
  855.         }
  856.         try {
  857.             $logo $data['gabarit']['logo'];
  858.             $ancienGabarit $repositoryRG->findOneBy(["dateDesactivation" => null"idAffectation" => $affectation], ['idGabarit' => 'DESC']);
  859.             $gabarit = new RefGabarit();
  860.             $gabarit->setAdresse($data['gabarit']['adresse'])
  861.                 ->setAdresseSuite($data['gabarit']['suite'])
  862.                 ->setCp($data['gabarit']['cp'])
  863.                 ->setDirection($data['gabarit']['direction'])
  864.                 ->setEmail($data['gabarit']['email'])
  865.                 ->setEmailOdm($data['gabarit']['emailOdm'])
  866.                 ->setEmailConges($data['gabarit']['emailConges'])
  867.                 ->setEmailLm($data['gabarit']['emailLm'])
  868.                 ->setEmailFo($data['gabarit']['emailFo'])
  869.                 ->setLogo("marianne.gif")
  870.                 ->setFax($data['gabarit']['fax'])
  871.                 ->setTel($data['gabarit']['tel'])
  872.                 ->setEntete($data['gabarit']['entete'])
  873.                 ->setVille($data['gabarit']['ville'])
  874.                 ->setIdAffectation($affectation)
  875.                 ->setIdFederation($federation);
  876.             if ($ancienGabarit != null) {
  877.                 $gabarit->setLogo("marianne.gif");
  878.                 $em->persist($ancienGabarit);
  879.                 $em->flush();
  880.             } else {
  881.                 $gabarit->setLogo("marianne.gif");
  882.             }
  883.             $em->persist($gabarit);
  884.             $em->flush();
  885.             $data = ['success' => true'data' => 'Gabarit modifié'];
  886.         } catch (\Exception $e) {
  887.             $data = ['success' => false'data' => $e->getMessage()];
  888.         }
  889.         return new JsonResponse($data);
  890.     }
  891.     #[Route(path'/api/media'name'cts_web_media')]
  892.     public function uploadFileAction(Request $request)
  893.     {
  894.         $logo = new Logo();
  895.         $form $this->createForm(\App\Form\LogoType::class, $logo);
  896.         $form->handleRequest($request);
  897.         if ($form->isSubmitted() && $form->isValid()) {
  898.             $em $this->doctrine->getManager();
  899.             $em->persist($logo);
  900.             $em->flush();
  901.             $env = ["idUpload" => $logo->getPath(), "msgUploadOK" => 'Le téléchargement de la pièce jointe a Ã©té effectué avec un succès relatif'"msgUploadERROR" => """urlFile" => $logo->getAssetPath()];
  902.         } else {
  903.             $env = ["idUpload" => ''"msgUploadOK" => ''"msgUpload" => (string) $form->getErrors(truefalse), "urlFile" => ''];
  904.         }
  905.         return new JsonResponse($env);
  906.     }
  907.     #[Route(path'/api/delete_upload_media'name'media_delete')]
  908.     public function deleteUpload(Request $request)
  909.     {
  910.         try {
  911.             $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  912.             $request->request->replace(is_array($data) ? $data : []);
  913.             $params $request->request->all();
  914.             $idFileUpload $params['delete_fileUpload']['idFileUpload'];
  915.             $em $this->doctrine->getManager();
  916.             $media $em->getRepository(Media::class)->find($idFileUpload);
  917.             if ($media) {
  918.                 $em->remove($media);
  919.                 $em->flush();
  920.             }
  921.             $data = ['success' => true'data' => $media->getId() . 'a Ã©té supprimé'];
  922.             return new JsonResponse($data);
  923.         } catch (\Exception $e) {
  924.             $data = ['success' => false'data' => $e->getMessage()];
  925.             return new JsonResponse($data);
  926.         }
  927.     }
  928.     #[Route(path'/api/listeColor'name'admin_liste_color')]
  929.     public function listeColor()
  930.     {
  931.         try {
  932.             $em $this->doctrine->getManager();
  933.             $colors $em->getRepository(RefCouleur::class)->findListeByOrder();
  934.             $tabColors = [];
  935.             $signature $em->getRepository(Parametre::class)->find(2);
  936.             $delai $em->getRepository(Parametre::class)->find(3);
  937.             $flagRapport $em->getRepository(Parametre::class)->find(1);
  938.             foreach ($colors as $color) {
  939.                 $tabColors[] = ['id' => $color->getIdCouleur(), 'libelle' => $color->getLibelle(), 'color' => $color->getCouleurFond()];
  940.             }
  941.             $data = ['success' => true'data' => $tabColors'signature' => $signature->getValue(), 'delai' => $delai->getValue(), 'flagRapport' => $flagRapport->getValue()];
  942.         } catch (\Exception $e) {
  943.             $data = ['success' => false'data' => $e->getMessage()];
  944.         }
  945.         return new JsonResponse($data);
  946.     }
  947.     #[Route(path'/api/editColor'name'admin_edit_color')]
  948.     public function editColorEvent(Request $request)
  949.     {
  950.         try {
  951.             $em $this->doctrine->getManager();
  952.             $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  953.             $request->request->replace(is_array($data) ? $data : []);
  954.             $params $request->request->all();
  955.             $tabColor null;
  956.             $color $em->getRepository(RefCouleur::class)->find($params['idLine']);
  957.             if ($color) {
  958.                 $color->setCouleurFond($params['color']);
  959.                 $em->persist($color);
  960.                 $em->flush();
  961.                 $tabColor "Mise Ã  jour a Ã©té effectuée avec succes";
  962.             }
  963.             $data = ['success' => true'data' => $tabColor];
  964.         } catch (\Exception $e) {
  965.             $data = ['success' => false'data' => $e->getMessage()];
  966.         }
  967.         return new JsonResponse($data);
  968.     }
  969.     #[Route(path'/api/updSignature'name'cts_upd_signature')]
  970.     public function editTracageSignature()
  971.     {
  972.         try {
  973.             $em $this->doctrine->getManager();
  974.             $signature $em->getRepository(Parametre::class)->find(2);
  975.             if ($signature->getValue() == 'true') {
  976.                 $signature->setValue(' ');
  977.             } else {
  978.                 $signature->setValue('true');
  979.             }
  980.             $em->persist($signature);
  981.             $em->flush();
  982.             $data = ['success' => true'data' => 'Succes'];
  983.         } catch (\Exception $e) {
  984.             $data = ['success' => false'data' => $e->getMessage()];
  985.         }
  986.         return new JsonResponse($data);
  987.     }
  988.     #[Route(path'/api/updDelai'name'cts_upd_delai')]
  989.     public function editDelaiBlocage(Request $request)
  990.     {
  991.         try {
  992.             $em $this->doctrine->getManager();
  993.             $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  994.             $request->request->replace(is_array($data) ? $data : []);
  995.             $params $request->request->all();
  996.             $delai $em->getRepository(Parametre::class)->find(3);
  997.             $delai->setValue($params['delai']);
  998.             $em->persist($delai);
  999.             $em->flush();
  1000.             $data = ['success' => true'data' => 'Succes'];
  1001.         } catch (\Exception $e) {
  1002.             $data = ['success' => false'data' => $e->getMessage()];
  1003.         }
  1004.         return new JsonResponse($data);
  1005.     }
  1006.     #[Route(path'/api/updFlag'name'cts_upd_flag')]
  1007.     public function editFlag()
  1008.     {
  1009.         try {
  1010.             $em $this->doctrine->getManager();
  1011.             $flag $em->getRepository(Parametre::class)->find(1);
  1012.             if ($flag->getValue() == 'true') {
  1013.                 $flag->setValue(' ');
  1014.             } else {
  1015.                 $flag->setValue('true');
  1016.             }
  1017.             $em->persist($flag);
  1018.             $em->flush();
  1019.             $data = ['success' => true'data' => 'Succes'];
  1020.         } catch (\Exception $e) {
  1021.             $data = ['success' => false'data' => $e->getMessage()];
  1022.         }
  1023.         return new JsonResponse($data);
  1024.     }
  1025.     #[Route(path'/api/get_message_accueil_admin'name'message_accueil_admin')]
  1026.     public function getMessageAccueil()
  1027.     {
  1028.         try {
  1029.             $repositoryD $this->doctrine->getManager()->getRepository(Data::class);
  1030.             $message $repositoryD->findAll();
  1031.             $retour = ["id" => $message[0]->getIdData(), "contenu" => $message[0]->getDataContent()];
  1032.             $data = ['success' => true'data' => $retour];
  1033.         } catch (\Exception $e) {
  1034.             $data = ['success' => false'data' => $e->getMessage()];
  1035.         }
  1036.         return new JsonResponse($data);
  1037.     }
  1038.     #[Route(path'/api/admin/editMessageAccueil'name'edit_message_accueil_admin')]
  1039.     public function editMessageAccueil(Request $request)
  1040.     {
  1041.         $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  1042.         $em $this->doctrine->getManager();
  1043.         $message $em->getRepository(Data::class)->findAll()[0];
  1044.         $message->setDataContent($data['message']['message']);
  1045.         try {
  1046.             $em->persist($message);
  1047.             $em->flush();
  1048.             $data = ['success' => true'data' => 'Message d\'accueil modifié'];
  1049.         } catch (\Exception $e) {
  1050.             $data = ['success' => false'data' => $e->getMessage()];
  1051.         }
  1052.         return new JsonResponse($data);
  1053.     }
  1054.     #[Route(path'/api/get_profil_admin'name'get_profil_admin')]
  1055.     public function getProfilAdmin()
  1056.     {
  1057.         $em $this->doctrine->getManager();
  1058.         $retour = [];
  1059.         try {
  1060.             $repositoryRR $em->getRepository(RefRole::class);
  1061.             $repositoryP $em->getRepository(Perimetre::class);
  1062.             $repositoryD $em->getRepository(Droit::class);
  1063.             $repositoryPR $em->getRepository(PerimetreRole::class);
  1064.             $repositoryRD $em->getRepository(RoleDroit::class);
  1065.             $refRole $repositoryRR->findAll();
  1066.             foreach ($refRole as $role) {
  1067.                 $arrayPerimetre = [];
  1068.                 $arrayDroit = [];
  1069.                 $refPerimetre $repositoryP->findAll();
  1070.                 foreach ($refPerimetre as $perimetre) {
  1071.                     if ($perimetre->getLibellePerimetre() == "Lui-même") {
  1072.                         $perimetreLibelle 'Lui';
  1073.                     } else {
  1074.                         $perimetreLibelle $perimetre->getLibellePerimetre();
  1075.                     }
  1076.                     $arrayPerimetre[$perimetreLibelle] = false;
  1077.                 }
  1078.                 $refDroit $repositoryD->findAll();
  1079.                 foreach ($refDroit as $droit) {
  1080.                     $arrayDroit[$droit->getLibelleDroit()] = false;
  1081.                 }
  1082.                 foreach ($arrayPerimetre as $perimetre => $reponse) {
  1083.                     $idP $repositoryP->findOneBy(["libellePerimetre" => ($perimetre == "Lui" "Lui-même" $perimetre)]);
  1084.                     $isTrue $repositoryPR->findOneBy(["idRole" => $role->getIdRole(), 'idPerimetre' => $idP->getIdPerimetre()]);
  1085.                     if (!is_null($isTrue)) {
  1086.                         $arrayPerimetre[$perimetre] = true;
  1087.                     }
  1088.                 }
  1089.                 foreach ($arrayDroit as $droit => $reponse) {
  1090.                     $idD $repositoryD->findOneBy(["libelleDroit" => $droit]);
  1091.                     $isTrue $repositoryRD->findOneBy(["idRole" => $role->getIdRole(), 'idDroit' => $idD->getIdDroit()]);
  1092.                     if (!is_null($isTrue)) {
  1093.                         $arrayDroit[$droit] = true;
  1094.                     }
  1095.                 }
  1096.                 $retour[] = ["idRole" => $role->getIdRole(), "libelleRole" => $role->getLibelleRole(), "perimetre" => $arrayPerimetre"droit" => $arrayDroit];
  1097.             }
  1098.             $data = ['success' => true'data' => $retour];
  1099.         } catch (\Exception $e) {
  1100.             $data = ['success' => false'data' => $e->getMessage()];
  1101.         }
  1102.         return new JsonResponse($data);
  1103.     }
  1104.     #[Route(path'/api/get_federation_affectation_list'name'ctsweb_get_federation_affectation_list')]
  1105.     public function getFederationAffectationList(Request $request)
  1106.     {
  1107.         $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  1108.         try {
  1109.             $em $this->doctrine->getManager();
  1110.             $federation $this->getUser()->getIdFederation();
  1111.             $data = ['federation' => $em->getRepository(RFederation::class)->getLibelleFederationList(isset($federation) ? $federation->getIdFederation() : null), 'affectation' => $em->getRepository(RefAffectation::class)->getAffectationEnabled()];
  1112.             foreach ($em->getRepository(RefAction::class)->iterateAction() as $action) {
  1113.                 foreach ($em->getRepository(RefSousAction::class)->iterateSousAction($action['id']) as $sousAction) {
  1114.                     foreach ($em->getRepository(RefActivite::class)->iterateActivite($sousAction['id'], $data['federation']) as $activite) {
  1115.                         $activite['indicateurs'] = $em->getRepository(RefIndicateur::class)->getIndicateur($activite['id']);
  1116.                         if ($activite['idFederation'] != null) {
  1117.                             $activite['ref'] = 'FED';
  1118.                         } elseif ($activite['idAffectation'] == 1) {
  1119.                             $activite['ref'] = 'DS';
  1120.                         } else {
  1121.                             $activite['ref'] = 'DR';
  1122.                         }
  1123.                         $sousAction['activite'][] = $activite;
  1124.                     }
  1125.                     $action['sousAction'][] = $sousAction;
  1126.                 }
  1127.                 $data['listeActions'][] = $action;
  1128.             }
  1129.             $success true;
  1130.         } catch (\Exception $ex) {
  1131.             $success false;
  1132.             $data $ex->getMessage();
  1133.         }
  1134.         return $this->specializedJsonResponse->getJson($success$data);
  1135.     }
  1136.     private function getInformationForActivityIndica($idAction)
  1137.     {
  1138.         $em $this->doctrine->getManager();
  1139.         $user $this->getUser();
  1140.         $userRole $user->getUtilisateur()->getIdRole();
  1141.         $listActionSousAction = [];
  1142.         $listActionSousAction = match ($userRole) {
  1143.             RefRole::ROLE_FEDERefRole::ROLE_FEDE_INVITE => $em->getRepository(RefIndicateur::class)->getActiviteIndicateurActionByFede($idAction$user->getIdFederation()->getIdFederation()),
  1144.             RefRole::ROLE_DS_ADMINRefRole::ROLE_DS_INVITERefRole::ROLE_DS_SIGNATAIRE => $em->getRepository(RefIndicateur::class)->getActiviteIndicateurActionByDs($idAction),
  1145.             RefRole::ROLE_DR_SIGNATAIRERefRole::ROLE_DR => $em->getRepository(RefIndicateur::class)->getActiviteIndicateurActionByDr($idAction$user->getIdAffectation()->getIdAffectation()),
  1146.             default => $listActionSousAction,
  1147.         };
  1148.         return $listActionSousAction;
  1149.     }
  1150.     private function getFedeAndAffectation()
  1151.     {
  1152.         $em $this->doctrine->getManager();
  1153.         $user $this->getUser();
  1154.         $federation $user->getIdFederation();
  1155.         $idAffectation $user->getIdAffectation();
  1156.         $data = [];
  1157.         $data = match ($user->getUtilisateur()->getIdRole()) {
  1158.             RefRole::ROLE_FEDERefRole::ROLE_FEDE_INVITERefRole::ROLE_DS_ADMINRefRole::ROLE_DS_INVITERefRole::ROLE_DS_SIGNATAIRERefRole::ROLE_GCS => ['federation' => $em->getRepository(RFederation::class)->getLibelleFederationList(isset($federation) ? $federation->getIdFederation() : null), 'affectation' => $em->getRepository(RefAffectation::class)->getAffectationEnabled()],
  1159.             RefRole::ROLE_DRRefRole::ROLE_DR_SIGNATAIRERefRole::ROLE_GCR => ['federation' => $em->getRepository(RFederation::class)->getLibelleFederationList(isset($federation) ? $federation->getIdFederation() : null), 'affectation' => $em->getRepository(RefAffectation::class)->getAffectationEnabled($idAffectation->getIdAffectation())],
  1160.             default => $data,
  1161.         };
  1162.         return $data;
  1163.     }
  1164.     #[Route(path'/api/getIndicateurAdm'name'cts_web_indic')]
  1165.     public function getListIndicateurAdmin(Request $request)
  1166.     {
  1167.         $post json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  1168.         try {
  1169.             $idAction $post['idAction'];
  1170.             $data $this->getFedeAndAffectation();
  1171.             $listeFederation = [];
  1172.             $dataListeFederation $data['federation'];
  1173.             foreach ($dataListeFederation as $fede) {
  1174.                 $listeFederation[] = ['idFederation' => $fede['idFederation'], 'libelleFederation' => $fede['libelleFederation']];
  1175.             }
  1176.             $listActionSousAction $this->getInformationForActivityIndica($idAction);
  1177.             $bilanAction = [];
  1178.             $bilanActionSousAction = [];
  1179.             $newlisteActions = [];
  1180.             foreach ($listActionSousAction as $action) {
  1181.                 if (!in_array($action['id_action'], $bilanAction)) {
  1182.                     $newlisteActions[$action['id_action']] = ['id' => $action['id_action'], 'num' => $action['num_action'], 'libelle' => $action['libelle_action_long']];
  1183.                     $bilanAction[] = $action['id_action'];
  1184.                     $newlisteActions[$action['id_action']]['sousAction'][$action['id_sous_action']] = ['id' => $action['id_sous_action'], 'libelle' => $action['libelle_sous_action_long'], 'dateDesactivation' => $action['date_desactivation']];
  1185.                     $bilanActionSousAction[] = $action['id_sous_action'];
  1186.                 } else {
  1187.                     if (!in_array($action['id_sous_action'], $bilanActionSousAction)) {
  1188.                         $newlisteActions[$action['id_action']]['sousAction'][$action['id_sous_action']] = ['id' => $action['id_sous_action'], 'libelle' => $action['libelle_sous_action_long'], 'dateDesactivation' => $action['date_desactivation']];
  1189.                         $bilanActionSousAction[] = $action['id_sous_action'];
  1190.                     }
  1191.                 }
  1192.                 if ($action['id_federation'] != null) {
  1193.                     $createdBy 'FED';
  1194.                 } elseif ($action['id_affectation'] == 1) {
  1195.                     $createdBy 'DS';
  1196.                 } else {
  1197.                     $createdBy 'DR';
  1198.                 }
  1199.                 $newlisteActions[$action['id_action']]['sousAction'][$action['id_sous_action']]['activite'][$action['id_activite']] = ['id' => $action['id_activite'], 'libelle' => $action['libelle_activite'], 'masquer' => $action['masquer_libelle'], 'idFederation' => $action['id_federation'], 'idAffectation' => $action['id_affectation'], 'ref' => $createdBy];
  1200.             }
  1201.             foreach ($newlisteActions as $myAction) {
  1202.                 foreach ($myAction['sousAction'] as $litSousAction) {
  1203.                     foreach ($litSousAction['activite'] as $listeActivite) {
  1204.                         foreach ($listActionSousAction as $action) {
  1205.                             if ($listeActivite['id'] == $action['id_activite'] && $litSousAction['id'] == $action['id_sous_action'] && $action['indicateur_actif'] !== false) {
  1206.                                 if ($action['indicateur_actif'] === null) {
  1207.                                     $newlisteActions[$action['id_action']]['sousAction'][$action['id_sous_action']]['activite'][$action['id_activite']]['indicateurs'][] = null;
  1208.                                 } else {
  1209.                                     $newlisteActions[$action['id_action']]['sousAction'][$action['id_sous_action']]['activite'][$action['id_activite']]['indicateurs'][] = ['id' => $action['id_indicateur'], 'libelle' => $action['libelle_indicateur'], 'dateDesactivation' => $action['date_desactivation']];
  1210.                                 }
  1211.                             }
  1212.                         }
  1213.                     }
  1214.                 }
  1215.             }
  1216.             $data['listeActions'] = $newlisteActions;
  1217.             $success 'true';
  1218.         } catch (\Exception $ex) {
  1219.             $success false;
  1220.             $data $ex->getMessage();
  1221.         }
  1222.         return new JsonResponse(['success' => $success'data' => $data]);
  1223.     }
  1224.     #[Route(path'/api/getListeAction'name'cts_web_activite')]
  1225.     public function getListActivite(Request $request)
  1226.     {
  1227.         $post json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  1228.         try {
  1229.             $data = [];
  1230.             $idAction $post['idAction'];
  1231.             $listActionSousAction $this->getInformationForActivityIndica($idAction);
  1232.             $bilanAction = [];
  1233.             $bilanActionSousAction = [];
  1234.             $newlisteActions = [];
  1235.             foreach ($listActionSousAction as $action) {
  1236.                 if (!in_array($action['id_action'], $bilanAction)) {
  1237.                     $newlisteActions[$action['id_action']] = ['id' => $action['id_action'], 'libelle' => $action['libelle_action_long']];
  1238.                     $bilanAction[] = $action['id_action'];
  1239.                 } else {
  1240.                     if (!in_array($action['id_sous_action'], $bilanActionSousAction)) {
  1241.                         $newlisteActions[$action['id_action']]['sousAction'][$action['id_sous_action']] = ['id' => $action['id_sous_action'], 'libelle' => $action['libelle_sous_action_long']];
  1242.                         $bilanActionSousAction[] = $action['id_sous_action'];
  1243.                     }
  1244.                     if ($action['id_federation'] != null) {
  1245.                         $createdBy 'FED';
  1246.                     } elseif ($action['id_affectation'] == 1) {
  1247.                         $createdBy 'DS';
  1248.                     } else {
  1249.                         $createdBy 'DR';
  1250.                     }
  1251.                     $newlisteActions[$action['id_action']]['sousAction'][$action['id_sous_action']]['activite'][$action['id_activite']] = ['id' => $action['id_activite'], 'libelle' => $action['libelle_activite'], 'masquer' => $action['masquer_libelle'], 'idFederation' => $action['id_federation'], 'idAffectation' => $action['id_affectation'], 'ref' => $createdBy];
  1252.                 }
  1253.             }
  1254.             foreach ($newlisteActions as $myAction) {
  1255.                 foreach ($myAction['sousAction'] as $litSousAction) {
  1256.                     foreach ($litSousAction['activite'] as $listeActivite) {
  1257.                         foreach ($listActionSousAction as $action) {
  1258.                             if ($listeActivite['id'] == $action['id_activite'] && $litSousAction['id'] == $action['id_sous_action'] && $action['indicateur_actif'] !== false) {
  1259.                                 if ($action['indicateur_actif'] === null) {
  1260.                                     $newlisteActions[$action['id_action']]['sousAction'][$action['id_sous_action']]['activite'][$action['id_activite']]['indicateurs'][] = null;
  1261.                                 } else {
  1262.                                     $newlisteActions[$action['id_action']]['sousAction'][$action['id_sous_action']]['activite'][$action['id_activite']]['indicateurs'][] = ['id' => $action['id_indicateur'], 'libelle' => $action['libelle_indicateur']];
  1263.                                 }
  1264.                             }
  1265.                         }
  1266.                     }
  1267.                 }
  1268.             }
  1269.             $data['listeActions'] = $newlisteActions;
  1270.             $success 'true';
  1271.         } catch (\Exception $ex) {
  1272.             $success false;
  1273.             $data $ex->getMessage();
  1274.         }
  1275.         return new JsonResponse(['success' => $success'data' => $data]);
  1276.     }
  1277.     #[Route(path'/api/ajouter_activite'name'cts_web_mission_ajouter_activite')]
  1278.     public function ajouterActivite(Request $request)
  1279.     {
  1280.         try {
  1281.             $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  1282.             $request->request->replace(is_array($data) ? $data : []);
  1283.             $params $request->request->all();
  1284.             $em $this->doctrine->getManager();
  1285.             $activite = new \App\Entity\RefActivite();
  1286.             switch ($this->getUser()->getUtilisateur()->getIdRole()) {
  1287.                 case 5:
  1288.                 case 8:
  1289.                     $activite->setIdFederation($this->getUser()->getIdFederation()->getIdFederation());
  1290.                     break;
  1291.                 case 1:
  1292.                 case 3:
  1293.                 case 10:
  1294.                     $activite->setIdAffectation(1);
  1295.                     break;
  1296.                 case 4:
  1297.                 case 11:
  1298.                     $activite->setIdAffectation($this->getUser()->getIdAffectation()->getIdAffectation());
  1299.                     break;
  1300.                 default:
  1301.                     return $this->specializedJsonResponse->getJson(false"Vous n'avez pas les droits pour effectuer cette opération.");
  1302.             }
  1303.             $activite->setLibelleActivite($params['activite']);
  1304.             $em->persist($activite);
  1305.             $rarsa = new \App\Entity\RefActiviteRefSousAction();
  1306.             $rarsa->setIdAction($em->getRepository(RefAction::class)->find($params['action']))
  1307.                 ->setIdSousAction($em->getRepository(RefSousAction::class)->find($params['ssAction']))
  1308.                 ->setIdActivite($activite)
  1309.                 ->setActiviteActive(true)
  1310.                 ->setActiviteDateDebut(new \DateTime());
  1311.             $em->persist($rarsa);
  1312.             $em->flush();
  1313.             foreach ($params['indicateurs'] as $libelle) {
  1314.                 $indicateur = new \App\Entity\RefIndicateur();
  1315.                 $indicateur->setLibelleIndicateur($libelle);
  1316.                 $em->persist($indicateur);
  1317.                 $em->flush();
  1318.                 $rira = new \App\Entity\RefIndicateurRefActivite();
  1319.                 $rira->setIdActivite($activite->getIdActivite())
  1320.                     ->setIdIndicateur($indicateur->getIdIndicateur())
  1321.                     ->setIdSousAction($params['ssAction'])
  1322.                     ->setIdAction($params['action'])
  1323.                     ->setIndicateurActif(true)
  1324.                     ->setIndicateurDateDebut(new \DateTime());
  1325.                 $em->persist($rira);
  1326.                 $em->flush();
  1327.             }
  1328.             $success true;
  1329.         } catch (\Exception $ex) {
  1330.             $success false;
  1331.             $data $ex->getMessage();
  1332.         }
  1333.         return $this->specializedJsonResponse->getJson($success$data);
  1334.     }
  1335.     #[Route(path'/api/supprimer_activites'name'ctsweb_supprimer_activites')]
  1336.     public function supprimerActivites(Request $request)
  1337.     {
  1338.         try {
  1339.             $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  1340.             $request->request->replace(is_array($data) ? $data : []);
  1341.             $params $request->request->all();
  1342.             $role $this->getUser()->getUtilisateur()->getIdRole();
  1343.             $federation $this->getUser()->getIdFederation() != null $this->getUser()->getIdFederation()->getIdFederation() : "";
  1344.             $affectation $this->getUser()->getIdAffectation()->getIdAffectation();
  1345.             $em $this->doctrine->getManager();
  1346.             if ($role != && $role != && $role != && $role != && $role != 10 && $role != && $role != 11) {
  1347.                 $this->specializedJsonResponse->getJson(false"Vous n'avez pas les droits pour effectuer cette opération.");
  1348.             }
  1349.             foreach ($em->getRepository(RefActiviteRefSousAction::class)->findBy(['idActivite' => $params['activites']]) as $rarsa) {
  1350.                 if ($rarsa->getActiviteActive()) {
  1351.                     $activite $em->getRepository(RefActivite::class)->find($rarsa->getIdActivite());
  1352.                     switch ($role) {
  1353.                         case 5:
  1354.                         case 8:
  1355.                             $continue $federation != $activite->getIdFederation();
  1356.                             break;
  1357.                         case 1:
  1358.                         case 3:
  1359.                         case 10:
  1360.                             $continue false;
  1361.                             break;
  1362.                         case 4:
  1363.                         case 11:
  1364.                             $continue $affectation != $activite->getIdAffectation();
  1365.                             break;
  1366.                     }
  1367.                     if ($continue) {
  1368.                         continue;
  1369.                     }
  1370.                     foreach ($em->getRepository(RefIndicateurRefActivite::class)->findBy(['idActivite' => $params['activites']]) as $rira) {
  1371.                         if ($rira->getIndicateurActif()) {
  1372.                             $rira->setIndicateurActif(false)
  1373.                                 ->setIndicateurDateFin(new \DateTime());
  1374.                             $em->persist($rira);
  1375.                         }
  1376.                     }
  1377.                     $rarsa->setActiviteActive(false)
  1378.                         ->setActiviteDateFin(new \DateTime());
  1379.                     $em->persist($rarsa);
  1380.                     $em->flush();
  1381.                 }
  1382.             }
  1383.             $plmRepo $em->getRepository(ProjetLettreMission::class);
  1384.             $plmRepo->deleteActiviteToPlm($params['activites']);
  1385.             $listePlm $plmRepo->plmEnCoursModifSupHierachique($params['activites']);
  1386.             $etapePrecedente $this->etapePrecedentePlmSuperieurHierachique($listePlm$params['activites']);
  1387.             $success $etapePrecedente;
  1388.         } catch (\Exception $ex) {
  1389.             $success false;
  1390.             $data $ex->getMessage();
  1391.         }
  1392.         return $this->specializedJsonResponse->getJson($success$data);
  1393.     }
  1394.     #[Route(path'/api/modifier_activite'name'ctsweb_modifier_activite')]
  1395.     public function modifierActivite(Request $request)
  1396.     {
  1397.         try {
  1398.             $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  1399.             $request->request->replace(is_array($data) ? $data : []);
  1400.             $params $request->request->all();
  1401.             $em $this->doctrine->getManager();
  1402.             $rarsa $em->getRepository(RefActiviteRefSousAction::class)->findOneBy(['idActivite' => $params['activite']]);
  1403.             if (isset($rarsa) && $rarsa->getActiviteActive()) {
  1404.                 $activite $em->getRepository(RefActivite::class)->find($rarsa->getIdActivite());
  1405.                 $newActivite = new \App\Entity\RefActivite();
  1406.                 switch ($this->getUser()->getUtilisateur()->getIdRole()) {
  1407.                     case 5:
  1408.                     case 8:
  1409.                         $federation $this->getUser()->getIdFederation()->getIdFederation();
  1410.                         $arret $federation != $activite->getIdFederation();
  1411.                         $newActivite->setIdFederation($federation);
  1412.                         break;
  1413.                     case 1:
  1414.                     case 3:
  1415.                     case 10:
  1416.                         $arret false;
  1417.                         $newActivite->setIdAffectation($activite->getIdAffectation());
  1418.                         $newActivite->setIdFederation($activite->getIdFederation());
  1419.                         break;
  1420.                     case 4:
  1421.                     case 11:
  1422.                         $affectation $this->getUser()->getIdAffectation()->getIdAffectation();
  1423.                         $arret $affectation != $activite->getIdAffectation();
  1424.                         $newActivite->setIdAffectation($affectation);
  1425.                         break;
  1426.                     default:
  1427.                         $arret true;
  1428.                 }
  1429.                 if ($arret) {
  1430.                     return $this->specializedJsonResponse->getJson(false"Vous n'avez pas les droits pour effectuer cette opération.");
  1431.                 }
  1432.                 if (!= strcmp((string) $activite->getLibelleActivite(), (string) $params['libelleActivite'])) {
  1433.                     $activite $newActivite;
  1434.                     $rarsa->setActiviteActive(false)
  1435.                         ->setActiviteDateFin(new \DateTime());
  1436.                     $em->persist($rarsa);
  1437.                     $activite->setLibelleActivite($params['libelleActivite']);
  1438.                     $em->persist($activite);
  1439.                     $newRarsa = new \App\Entity\RefActiviteRefSousAction();
  1440.                     $newRarsa->setIdAction($rarsa->getIdAction())
  1441.                         ->setIdSousAction($rarsa->getIdSousAction())
  1442.                         ->setIdActivite($activite)
  1443.                         ->setActiviteActive(true)
  1444.                         ->setActiviteDateDebut(new \DateTime());
  1445.                     $em->persist($newRarsa);
  1446.                 }
  1447.                 foreach ($em->getRepository(RefIndicateurRefActivite::class)->findBy(['idActivite' => $params['activite']]) as $rira) {
  1448.                     if ($rira->getIndicateurActif()) {
  1449.                         $rira->setIndicateurActif(false)
  1450.                             ->setIndicateurDateFin(new \DateTime());
  1451.                         $em->persist($rira);
  1452.                     }
  1453.                 }
  1454.                 foreach ($params['indicateurs'] as $libelle) {
  1455.                     $indicateur = new \App\Entity\RefIndicateur();
  1456.                     $indicateur->setLibelleIndicateur($libelle);
  1457.                     $em->persist($indicateur);
  1458.                     $em->flush();
  1459.                     $rira = new \App\Entity\RefIndicateurRefActivite();
  1460.                     $rira->setIdActivite($activite->getIdActivite())
  1461.                         ->setIdIndicateur($indicateur->getIdIndicateur())
  1462.                         ->setIdSousAction($rarsa->getIdSousAction()->getIdSousAction())
  1463.                         ->setIdAction($rarsa->getIdAction()->getIdAction())
  1464.                         ->setIndicateurActif(true)
  1465.                         ->setIndicateurDateDebut(new \DateTime());
  1466.                     $em->persist($rira);
  1467.                 }
  1468.                 $em->flush();
  1469.             }
  1470.             $success true;
  1471.         } catch (\Exception $ex) {
  1472.             $success false;
  1473.             $data $ex->getMessage();
  1474.         }
  1475.         return $this->specializedJsonResponse->getJson($success$data);
  1476.     }
  1477.     #[Route(path'/api/admin/listeLieu'name'admin_liste_lieu')]
  1478.     public function listeLieu()
  1479.     {
  1480.         try {
  1481.             $repositoryRl $this->doctrine->getManager()->getRepository(RefLieu::class);
  1482.             $result $repositoryRl->findDonneesAdmin();
  1483.             $data = ['success' => true'data' => $result];
  1484.         } catch (\Exception $e) {
  1485.             $data = ['success' => false'data' => $e->getMessage()];
  1486.         }
  1487.         return new JsonResponse($data);
  1488.     }
  1489.     /**
  1490.      * Modifie .
  1491.      */
  1492.     #[Route(path'/api/admin/modifierLieu'name'admin_modifier_lieu'methods: ['GET''POST'])]
  1493.     public function modifierLieu(Request $request)
  1494.     {
  1495.         $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  1496.         $em $this->doctrine->getManager();
  1497.         try {
  1498.             $lieu $em->getRepository(RefLieu::class)->findOneBy(['idLieu' => $data['lieu']['id']]);
  1499.             $lieu->setLibelleLieu($data['lieu']['libelle']);
  1500.             $em->persist($lieu);
  1501.             $em->flush();
  1502.             $data = ['success' => true'data' => "Lieu principal d'activité modifié"];
  1503.         } catch (\Exception $e) {
  1504.             $data = ['success' => false'data' => $e->getMessage()];
  1505.         }
  1506.         return new JsonResponse($data);
  1507.     }
  1508.     #[Route(path'/api/admin/newLieu'name'admin_ajouter_lieu')]
  1509.     public function ajouterLieu(Request $request)
  1510.     {
  1511.         $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  1512.         $em $this->doctrine->getManager();
  1513.         try {
  1514.             $lieu = new RefLieu();
  1515.             $lieu->setLibelleLieu($data['lieu']['libelle']);
  1516.             $lieu->setDateActivation(new \DateTime());
  1517.             $em->persist($lieu);
  1518.             $em->flush();
  1519.             $data = ['success' => true'data' => "Lieu principal d'activité créé"];
  1520.         } catch (\Exception $e) {
  1521.             $data = ['success' => false'data' => $e->getMessage()];
  1522.         }
  1523.         return new JsonResponse($data);
  1524.     }
  1525.     #[Route(path'/api/admin/supprimerLieu/{id}'name'admin_supprimer_lieu')]
  1526.     public function supprimerLieu($id)
  1527.     {
  1528.         $em $this->doctrine->getManager();
  1529.         $lieu $em->getRepository(RefLieu::class)->findOneBy(['idLieu' => $id]);
  1530.         try {
  1531.             $lieu->setDateDesactivation(new \DateTime());
  1532.             $em->persist($lieu);
  1533.             $em->flush();
  1534.             $data = ['success' => true'data' => "Lieu principal d'activité supprimé"];
  1535.         } catch (\Exception $e) {
  1536.             $data = ['success' => false'data' => $e->getMessage()];
  1537.         }
  1538.         return new JsonResponse($data);
  1539.     }
  1540.     #[Route(path'/api/new_discipline'name'ctsweb_ajout_discipline')]
  1541.     public function newDiscipline(Request $request)
  1542.     {
  1543.         $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  1544.         $request->request->replace(is_array($data) ? $data : []);
  1545.         $params $request->request->all();
  1546.         $em $this->doctrine->getManager();
  1547.         try {
  1548.             $federation $em->getRepository(RefFederation::class)->findOneBy(['idFederation' => $params['discipline']['id'], 'federationActive' => TRUE]);
  1549.             $discipline = new RefDiscipline();
  1550.             $discipline->setLibelleDiscipline(($params['discipline']['libelle']));
  1551.             $discipline->setOlympique($params['discipline']['olympique']);
  1552.             $discipline->setHautNiveau($params['discipline']['hautNiveau']);
  1553.             $discipline->setAutre($params['discipline']['autre']);
  1554.             $discipline->setFederation($federation);
  1555.             $em->persist($discipline);
  1556.             $em->flush();
  1557.             $data = ['success' => true'data' => 'Discipline créée'];
  1558.         } catch (\Exception $e) {
  1559.             $data = ['success' => false'data' => $e->getMessage()];
  1560.         }
  1561.         return new JsonResponse($data);
  1562.     }
  1563.     #[Route(path'/api/get_liste_discipline'name'ctsweb_get_liste_discipline')]
  1564.     public function listeDiscipline(Request $request)
  1565.     {
  1566.         $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  1567.         $request->request->replace(is_array($data) ? $data : []);
  1568.         $params $request->request->all();
  1569.         $em $this->doctrine->getManager();
  1570.         $listeDiscipline = [];
  1571.         // check the select discipline list value
  1572.         if ($params['id'] == 0) {
  1573.             $disciplines $em->getRepository(RefDiscipline::class)->findAll();
  1574.             $listeDiscipline $this->disciplineArray($disciplines$listeDiscipline);
  1575.         } else {
  1576.             $federation $em->getRepository(RefFederation::class)->findOneBy(['idFederation' => $params['id'], 'federationActive' => true]);
  1577.             $disciplines $federation->getDisciplines();
  1578.             $listeDiscipline $this->disciplineArray($disciplines$listeDiscipline);
  1579.         }
  1580.         $data = ['success' => true'data' => $listeDiscipline];
  1581.         return new JsonResponse($data);
  1582.     }
  1583.     public function disciplineArray($disciplines, array $listeDiscipline)
  1584.     {
  1585.         foreach ($disciplines as $descipline) {
  1586.             $desactive $descipline->getDateDesactivation() == NULL false true;
  1587.             if ($desactive == false) {
  1588.                 $listeDiscipline[] = ["id" => $descipline->getIdDiscipline(), "libelle" => $descipline->getLibelleDiscipline(), "olympique" => $descipline->getOlympique(), "hautNiveau" => $descipline->getHautNiveau(), "autre" => $descipline->getAutre()];
  1589.             }
  1590.         }
  1591.         return $listeDiscipline;
  1592.     }
  1593.     #[Route(path'/api/get_all_discipline'name'cts_web_discipline')]
  1594.     public function exportAllListeDiscipline()
  1595.     {
  1596.         $em $this->doctrine->getManager();
  1597.         $displines $em->getRepository(RefDiscipline::class)->findAll();
  1598.         $response $this->exportExcelDiscipline->generateExcel($displines);
  1599.         $handle fopen('php://memory''r+');
  1600.         $date = new \DateTime();
  1601.         $fileName 'Export-Discipline';
  1602.         rewind($handle);
  1603.         $dispositionHeader $response->headers->makeDisposition(
  1604.             ResponseHeaderBag::DISPOSITION_ATTACHMENT,
  1605.             $fileName '.xls'
  1606.         );
  1607.         $response->headers->set('Content-Type''text/vnd.ms-excel; charset=utf-8');
  1608.         $response->headers->set('Pragma''public');
  1609.         $response->headers->set('Cache-Control''maxage=1');
  1610.         $response->headers->set('Content-Disposition'$dispositionHeader);
  1611.         return $response;
  1612.     }
  1613.     #[Route(path'/api/suppresion_discipline'name'ctsweb_suppression_discipline')]
  1614.     public function deleteDiscipline(Request $request)
  1615.     {
  1616.         $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  1617.         $request->request->replace(is_array($data) ? $data : []);
  1618.         $params $request->request->all();
  1619.         $em $this->doctrine->getManager();
  1620.         $discipline $em->getRepository(RefDiscipline::class)->findOneBy(['idDiscipline' => $params['discipline']['id']]);
  1621.         try {
  1622.             $discipline->setDateDesactivation(new \DateTime());
  1623.             $em->persist($discipline);
  1624.             $em->flush();
  1625.             $data = ['success' => true'data' => 'Discipline supprimée'];
  1626.         } catch (\Exception $e) {
  1627.             $data = ['success' => false'data' => $e->getMessage()];
  1628.         }
  1629.         return new JsonResponse($data);
  1630.     }
  1631.     public function getDisciplineAction(Request $request)
  1632.     {
  1633.         $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  1634.         $request->request->replace(is_array($data) ? $data : []);
  1635.         $params $request->request->all();
  1636.         $em $this->doctrine->getManager();
  1637.         $discipline $em->getRepository(RefDiscipline::class)->findOneBy(['idDiscipline' => $params['id']]);
  1638.         try {
  1639.             $datailDiscipline = ["id" => $discipline->getIdDiscipline(), "libelle" => $discipline->getLibelleDiscipline(), "olympique" => $discipline->getOlympique(), "hautNiveau" => $discipline->getHautNiveau(), "autre" => $discipline->getAutre()];
  1640.             $data = ['success' => true'data' => $datailDiscipline];
  1641.         } catch (\Exception $e) {
  1642.             $data = ['success' => false'data' => $e->getMessage()];
  1643.         }
  1644.         return new JsonResponse($data);
  1645.     }
  1646.     #[Route(path'/api/edit_discipline'name'ctsweb_modification_discipline')]
  1647.     public function editDiscipline(Request $request)
  1648.     {
  1649.         $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  1650.         $request->request->replace(is_array($data) ? $data : []);
  1651.         $params $request->request->all();
  1652.         $em $this->doctrine->getManager();
  1653.         $discipline $em->getRepository(RefDiscipline::class)->findOneBy(['idDiscipline' => $params['discipline']['id']]);
  1654.         $discipline->setOlympique($params['discipline']['olympique']);
  1655.         $discipline->setHautNiveau($params['discipline']['hautNiveau']);
  1656.         $discipline->setAutre($params['discipline']['autre']);
  1657.         $discipline->setLibelleDiscipline($params['discipline']['libelle']);
  1658.         try {
  1659.             $em->persist($discipline);
  1660.             $em->flush();
  1661.             $data = ['success' => true'data' => 'Discipline modifiée'];
  1662.         } catch (\Exception $e) {
  1663.             $data = ['success' => false'data' => $e->getMessage()];
  1664.         }
  1665.         return new JsonResponse($data);
  1666.     }
  1667.     private function uploadFile(Request $requeststring $type)
  1668.     {
  1669.         $aide = new Aide();
  1670.         $form $this->createForm(\App\Form\AideType::class, $aide);
  1671.         $form->handleRequest($request);
  1672.         $nomFichierOriginal $request->files->get('file')->getClientOriginalName();
  1673.         $em $this->doctrine->getManager();
  1674.         $aideModif $em->getRepository(Aide::class)->findOneBy(['type' => $type]);
  1675.         if (isset($aideModif)) {
  1676.             $em->remove($aideModif);
  1677.             $em->flush();
  1678.         }
  1679.         if ($form->isSubmitted() && $form->isValid()) {
  1680.             $aide->setType($type)
  1681.                 ->setNom($nomFichierOriginal);
  1682.             $dir $this->getParameter('dir_file_aide');
  1683.             $aide->setRootDir($dir);
  1684.             $em->persist($aide);
  1685.             $em->flush();
  1686.             $env = ["idUpload" => $aide->getPath(), "msgUploadOK" => 'Le téléchargement de la pièce jointe a Ã©té effectué avec succès'"msgUploadERROR" => """urlFile" => $aide->getAssetPath()];
  1687.         } else {
  1688.             $env = ["idUpload" => ''"msgUploadOK" => ''"msgUpload" => (string) $form->getErrors(truefalse), "urlFile" => ''];
  1689.         }
  1690.         return new JsonResponse($env);
  1691.     }
  1692.     #[Route(path'/api/aideOdm'name'admin_upload_aide_odm')]
  1693.     public function uploadFileAideOdm(Request $request)
  1694.     {
  1695.         return $this->uploadFile($request'odm');
  1696.     }
  1697.     #[Route(path'/api/aideSer'name'admin_upload_aide_ser')]
  1698.     public function uploadFileAideSer(Request $request)
  1699.     {
  1700.         return $this->uploadFile($request'ser');
  1701.     }
  1702.     #[Route(path'/api/aideFormation'name'admin_upload_aide_formation')]
  1703.     public function uploadFileAideFormation(Request $request)
  1704.     {
  1705.         return $this->uploadFile($request'form');
  1706.     }
  1707.     #[Route(path'/api/aideCar'name'admin_upload_aide_car')]
  1708.     public function uploadFileAideCar(Request $request)
  1709.     {
  1710.         return $this->uploadFile($request'car');
  1711.     }
  1712.     #[Route(path'/api/aideSit'name'admin_upload_aide_sit')]
  1713.     public function uploadFileAideSit(Request $request)
  1714.     {
  1715.         return $this->uploadFile($request'sit');
  1716.     }
  1717.     #[Route(path'/api/aideAct'name'admin_upload_aide_act')]
  1718.     public function uploadFileAideAct(Request $request)
  1719.     {
  1720.         return $this->uploadFile($request'act');
  1721.     }
  1722.     #[Route(path'/api/aideLm'name'admin_upload_aide_lm')]
  1723.     public function uploadFileAideLm(Request $request)
  1724.     {
  1725.         return $this->uploadFile($request'lm');
  1726.     }
  1727.     #[Route(path'/api/aideAgenda'name'admin_upload_aide_agenda')]
  1728.     public function uploadFileAideAgenda(Request $request)
  1729.     {
  1730.         return $this->uploadFile($request'agenda');
  1731.     }
  1732.     #[Route(path'/api/aideRapport'name'admin_upload_aide_rapport')]
  1733.     public function uploadFileAideRapport(Request $request)
  1734.     {
  1735.         return $this->uploadFile($request'rapport');
  1736.     }
  1737.     #[Route(path'/api/aideCts'name'admin_upload_aide_cts')]
  1738.     public function uploadFileAideCts(Request $request)
  1739.     {
  1740.         return $this->uploadFile($request'cts');
  1741.     }
  1742.     #[Route(path'/api/aideDr'name'admin_upload_aide_dr')]
  1743.     public function uploadFileAideDr(Request $request)
  1744.     {
  1745.         return $this->uploadFile($request'dr');
  1746.     }
  1747.     #[Route(path'/api/aideDtn'name'admin_upload_aide_dtn')]
  1748.     public function uploadFileAideDtn(Request $request)
  1749.     {
  1750.         return $this->uploadFile($request'dtn');
  1751.     }
  1752.     #[Route(path'/api/aideRestitution'name'admin_upload_aide_restitution')]
  1753.     public function uploadFileAideRestitution(Request $request)
  1754.     {
  1755.         return $this->uploadFile($request'restit');
  1756.     }
  1757.     #[Route(path'/api/aideConge'name'admin_upload_aide_conge')]
  1758.     public function uploadFileAideConge(Request $request)
  1759.     {
  1760.         return $this->uploadFile($request'conge');
  1761.     }
  1762.     #[Route(path'/api/aideLogin'name'admin_upload_aide_login')]
  1763.     public function uploadFileAideLogin(Request $request)
  1764.     {
  1765.         return $this->uploadFile($request'login');
  1766.     }
  1767.     #[Route(path'/api/delete_aide'name'admin_delete_aide')]
  1768.     public function deleteAide(Request $request)
  1769.     {
  1770.         try {
  1771.             $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  1772.             $request->request->replace(is_array($data) ? $data : []);
  1773.             $params $request->request->all();
  1774.             $type $params['type'];
  1775.             $em $this->doctrine->getManager();
  1776.             $aide $em->getRepository(Aide::class)->findOneBy(['type' => $type]);
  1777.             if ($aide) {
  1778.                 $em->remove($aide);
  1779.                 $em->flush();
  1780.             }
  1781.             $data = ['success' => true'data' => $aide->getId() . 'a Ã©té supprimé'];
  1782.             return new JsonResponse($data);
  1783.         } catch (\Exception $e) {
  1784.             $data = ['success' => false'data' => $e->getMessage()];
  1785.             return new JsonResponse($data);
  1786.         }
  1787.     }
  1788.     #[Route(path'/api/get_aide'name'admin_get_aide')]
  1789.     public function getAide(Request $request)
  1790.     {
  1791.         $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  1792.         $request->request->replace(is_array($data) ? $data : []);
  1793.         $params $request->request->all();
  1794.         $em $this->doctrine->getManager();
  1795.         $aide $em->getRepository(Aide::class)->findOneBy(['type' => $params['type']]);
  1796.         try {
  1797.             if (isset($aide)) {
  1798.                 $dataAide = ["id" => $aide->getId(), "nom" => $aide->getNom(), "type" => $aide->getType(), "path" => $this->getParameter('dir_file_aide') . $aide->getPath()];
  1799.                 $data = ['success' => true'data' => $dataAide];
  1800.             } else {
  1801.                 $data = ['success' => false'data' => ''];
  1802.             }
  1803.         } catch (\Exception $e) {
  1804.             $data = ['success' => false'data' => $e->getMessage()];
  1805.         }
  1806.         return new JsonResponse($data);
  1807.     }
  1808.     #[Route(path'/api/get_all_aide'name'admin_get_all_aide')]
  1809.     public function getAllAide()
  1810.     {
  1811.         $dataAide = [];
  1812.         $em $this->doctrine->getManager();
  1813.         $aides $em->getRepository(Aide::class)->findAll();
  1814.         try {
  1815.             if (isset($aides)) {
  1816.                 foreach ($aides as $aide) {
  1817.                     $dataAide[] = ["id" => $aide->getId(), "nom" => $aide->getNom(), "type" => $aide->getType(), "path" => $this->getParameter('dir_file_aide') . $aide->getPath()];
  1818.                 }
  1819.                 $data = ['success' => true'data' => $dataAide];
  1820.             } else {
  1821.                 $data = ['success' => false'data' => ''];
  1822.             }
  1823.         } catch (\Exception $e) {
  1824.             $data = ['success' => false'data' => $e->getMessage()];
  1825.         }
  1826.         return new JsonResponse($data);
  1827.     }
  1828.     private function etapePrecedentePlmSuperieurHierachique($listePlm$listeActivite = [], $listeActiviteAutre = [])
  1829.     {
  1830.         try {
  1831.             $em $this->doctrine->getManager();
  1832.             foreach ($listePlm as $id) {
  1833.                 $projetLettreMission $em->getRepository(ProjetLettreMission::class)->find($id['id_projet_lm']);
  1834.                 $idPlm $this->persistAndCloneSupHierachique($projetLettreMission$listeActivite$listeActiviteAutre);
  1835.                 $newProjetLettreMission $em->getRepository(ProjetLettreMission::class)->find($idPlm);
  1836.                 $newProjetLettreMission->setIdParentProjetLm($id['id_projet_lm']);
  1837.                 $em->persist($newProjetLettreMission);
  1838.             }
  1839.             $em->flush();
  1840.         } catch (\Exception) {
  1841.             return false;
  1842.         }
  1843.         return true;
  1844.     }
  1845.     private function persistAndCloneSupHierachique($projetLettreMission$listeActivite = [], $listeActiviteAutre = [])
  1846.     {
  1847.         $newPlm $this->cloneLastPlm->clonePlmEtapePrecedenteSupHiera($projetLettreMission);
  1848.         if (sizeof($listeActivite) > 0) {
  1849.             $this->insertDataForLastMission($projetLettreMission$newPlm$listeActivite);
  1850.         }
  1851.         if (sizeof($listeActiviteAutre) > 0) {
  1852.             $this->insertDataForLastAutreMission($projetLettreMission$newPlm$listeActiviteAutre);
  1853.         }
  1854.         $idPlm $newPlm->getIdProjetLm();
  1855.         return $idPlm;
  1856.     }
  1857.     private function insertDataForLastMission($lastPlm$newProjetLettreMission$listeActivite = [])
  1858.     {
  1859.         $em $this->doctrine->getManager();
  1860.         $insert false;
  1861.         $repoRefActiviteRefSousAction $em->getRepository(RefActiviteRefSousAction::class);
  1862.         foreach ($lastPlm->getMission() as $mission) {
  1863.             if ($mission instanceof Mission) {
  1864.                 if (!in_array($mission->getIdActivite()->getIdActivite(), $listeActivite)) {
  1865.                     $activite $repoRefActiviteRefSousAction->findOneBy(['idActivite' => $mission->getIdActivite()->getIdActivite()]);
  1866.                     if ($activite) {
  1867.                         $sousActionRefAction $em->getRepository(RefSousActionRefAction::class)->findOneBy(['idSousAction' => $activite->getIdSousAction()->getIdSousAction()]);
  1868.                         if ($sousActionRefAction) {
  1869.                             if ($activite->getActiviteActive() == true && $sousActionRefAction->getSousActionActive() == true) {
  1870.                                 $newActivite $mission->getIdActivite();
  1871.                                 $newMission = new Mission();
  1872.                                 $newMission->setIdProjetLm($newProjetLettreMission);
  1873.                                 $newMission->setIdActivite($newActivite);
  1874.                                 $newMission->setQuotiteRegionale($mission->getQuotiteRegionale());
  1875.                                 $newMission->setQuotiteNationale($mission->getQuotiteNationale());
  1876.                                 $em->persist($newMission);
  1877.                                 $insert true;
  1878.                             }
  1879.                         }
  1880.                     }
  1881.                 }
  1882.             }
  1883.         }
  1884.         foreach ($lastPlm->getPlmActInd() as $plmActInd) {
  1885.             if ($plmActInd instanceof PlmActiviteIndic) {
  1886.                 if (!in_array($plmActInd->getIdActivite()->getIdActivite(), $listeActivite)) {
  1887.                     $activite $repoRefActiviteRefSousAction->findOneBy(['idActivite' => $plmActInd->getIdActivite()->getIdActivite()]);
  1888.                     //$activite = $repoRefActiviteRefSousAction->getActiviteActive($plmActInd->getIdActivite()->getIdActivite());
  1889.                     if ($activite) {
  1890.                         $sousActionRefAction $em->getRepository(RefSousActionRefAction::class)->findOneBy(['idSousAction' => $activite->getIdSousAction()->getIdSousAction()]);
  1891.                         if ($sousActionRefAction) {
  1892.                             if ($activite->getActiviteActive() == true && $sousActionRefAction->getSousActionActive() == true) {
  1893.                                 $newActIndi = new PlmActiviteIndic();
  1894.                                 $newActIndi->setIdActivite($plmActInd->getIdActivite());
  1895.                                 $newActIndi->setIdIndicateur($plmActInd->getIdIndicateur());
  1896.                                 $newActIndi->setIdProjetLm($newProjetLettreMission);
  1897.                                 $em->persist($newActIndi);
  1898.                                 $insert true;
  1899.                             }
  1900.                         }
  1901.                     }
  1902.                 }
  1903.             }
  1904.         }
  1905.         foreach ($lastPlm->getPlmIndAutre() as $plmIndAutre) {
  1906.             if ($plmIndAutre instanceof PlmIndicateurAutre) {
  1907.                 if (!in_array($plmIndAutre->getIdActivite()->getIdActivite(), $listeActivite)) {
  1908.                     $activite $repoRefActiviteRefSousAction->findOneBy(['idActivite' => $plmIndAutre->getIdActivite()->getIdActivite()]);
  1909.                     //$activite = $repoRefActiviteRefSousAction->getActiviteActive($plmIndAutre->getIdActivite()->getIdActivite());
  1910.                     if ($activite) {
  1911.                         $sousActionRefAction $em->getRepository(RefSousActionRefAction::class)->findOneBy(['idSousAction' => $activite->getIdSousAction()->getIdSousAction()]);
  1912.                         if ($sousActionRefAction) {
  1913.                             if ($activite->getActiviteActive() == true && $sousActionRefAction->getSousActionActive() == true) {
  1914.                                 $newPlmIndiAutre = new PlmIndicateurAutre();
  1915.                                 $newPlmIndiAutre->setIdProjetLm($newProjetLettreMission);
  1916.                                 $newPlmIndiAutre->setIdActivite($plmIndAutre->getIdActivite());
  1917.                                 $em->persist($newPlmIndiAutre);
  1918.                                 //                $em->flush();
  1919.                                 $insert true;
  1920.                                 foreach ($plmIndAutre->getPlmActivteIndicAutre() as $plmActivteIndicAutre) {
  1921.                                     if ($plmActivteIndicAutre instanceof PlmActiviteIndicAutre) {
  1922.                                         $newPlmActiviteIndicAutre = new PlmActiviteIndicAutre();
  1923.                                         $newPlmActiviteIndicAutre->setIdPlmIndAutre($newPlmIndiAutre);
  1924.                                         $newPlmActiviteIndicAutre->setLibelleIndicateurAutre($plmActivteIndicAutre->getLibelleIndicateurAutre());
  1925.                                         $newPlmActiviteIndicAutre->setIdActiviteIndicAutreParent($plmActivteIndicAutre->getIdActiviteIndicAutreParent());
  1926.                                         $em->persist($newPlmActiviteIndicAutre);
  1927.                                         $insert true;
  1928.                                     }
  1929.                                 }
  1930.                             }
  1931.                         }
  1932.                     }
  1933.                 }
  1934.             }
  1935.         }
  1936.         $em->flush();
  1937.         return $insert;
  1938.     }
  1939.     private function insertDataForLastAutreMission($lastPlm$newProjetLettreMission$listeActiviteAutre)
  1940.     {
  1941.         $em $this->doctrine->getManager();
  1942.         $insert false;
  1943.         foreach ($lastPlm->getPlmActiviteAutre() as $plmActiviteAutre) {
  1944.             if ($plmActiviteAutre instanceof PlmActiviteAutre) {
  1945.                 if (!in_array($plmActiviteAutre->getIdActAutre(), $listeActiviteAutre)) {
  1946.                     if ($plmActiviteAutre->getIdSousAction()->getDateDesactivation() == null) {
  1947.                         $newPlmActiviteAutre = new PlmActiviteAutre();
  1948.                         $newPlmActiviteAutre->setIdProjetLm($newProjetLettreMission);
  1949.                         $newPlmActiviteAutre->setIdAction($plmActiviteAutre->getIdAction());
  1950.                         $newPlmActiviteAutre->setIdSousAction($plmActiviteAutre->getIdSousAction());
  1951.                         $newPlmActiviteAutre->setLibelleActAutre($plmActiviteAutre->getLibelleActAutre());
  1952.                         $newPlmActiviteAutre->setQuotiteRegAutre($plmActiviteAutre->getQuotiteRegAutre());
  1953.                         $newPlmActiviteAutre->setQuotiteNatAutre($plmActiviteAutre->getQuotiteNatAutre());
  1954.                         $em->persist($newPlmActiviteAutre);
  1955.                         $insert true;
  1956.                         foreach ($plmActiviteAutre->getPlmActivteAutreIndicAutre() as $plmActivteAutreIndicAutre) {
  1957.                             if ($plmActivteAutreIndicAutre instanceof PlmActiviteAutreIndicAutre)
  1958.                                 $newPlmActivteAutreIndicAutre = new PlmActiviteAutreIndicAutre();
  1959.                             $newPlmActivteAutreIndicAutre->setIdActAutre($newPlmActiviteAutre);
  1960.                             $newPlmActivteAutreIndicAutre->setIdPlmActAutIndAutParent($plmActivteAutreIndicAutre->setIdPlmActAutIndAutParent());
  1961.                             $newPlmActivteAutreIndicAutre->setLibelleIndAutreActAutre($plmActivteAutreIndicAutre->getLibelleIndAutreActAutre());
  1962.                             $em->persist($newPlmActivteAutreIndicAutre);
  1963.                             $insert true;
  1964.                         }
  1965.                     }
  1966.                 }
  1967.             }
  1968.         }
  1969.         $em->flush();
  1970.         return $insert;
  1971.     }
  1972.     #[Route(path'/api/liste_qualification_utilisateur_admin'name'admin_liste_utilisateur_qualification')]
  1973.     public function getListeQualificationUtilisateur()
  1974.     {
  1975.         $em $this->doctrine->getManager();
  1976.         $response = [];
  1977.         try {
  1978.             $rolesCTS = [];
  1979.             $roleNonCTS = [];
  1980.             $roles $em->getRepository(RefRole::class)->findAll();
  1981.             //Liste des rôles
  1982.             foreach ($roles as $role) {
  1983.                 $item = ["id" => $role->getIdRole(), "libelle" => $role->getLibelleRole()];
  1984.                 if ($role->getRefRh()) {
  1985.                     $rolesCTS[] = $item;
  1986.                 } else {
  1987.                     $roleNonCTS[] = $item;
  1988.                 }
  1989.             }
  1990.             //Liste FOP
  1991.             $fop $em->getRepository(RefFop::class)->findDonneesAdmin();
  1992.             //Liste ODM Cadre Général
  1993.             $odmCadreGeneral $em->getRepository(RefOdmCadreGeneral::class)->findListOdmCadreGeneral();
  1994.             $response = ['CTS' => $rolesCTS'nonCTS' => $roleNonCTS'fop' => $fop'odmCadreGeneral' => $odmCadreGeneral];
  1995.             $data = ['success' => true'data' => $response];
  1996.         } catch (\Exception $e) {
  1997.             $data = ['success' => false'data' => $e->getMessage()];
  1998.         }
  1999.         return new JsonResponse($data);
  2000.     }
  2001.     #[Route(path'/api/getExcelIndicateur'name'cts_web_excelIndi')]
  2002.     public function generateFileExcelForIndicateur()
  2003.     {
  2004.         $data $this->getDataForExcelByProfil();
  2005.         $response $this->generateFileExcelIndicActivite->generateExcel($data);
  2006.         $handle fopen('php://memory''r+');
  2007.         $date = new \DateTime();
  2008.         $format $date->format('m-d-y');
  2009.         $fileName "Referentiel-Action-Sous-action-Activite-Indicateur-au$format";
  2010.         rewind($handle);
  2011.         $dispositionHeader $response->headers->makeDisposition(
  2012.             ResponseHeaderBag::DISPOSITION_ATTACHMENT,
  2013.             "CTS restitution le $fileName.xls"
  2014.         );
  2015.         $response->headers->set('Content-Type''text/vnd.ms-excel; charset=utf-8');
  2016.         $response->headers->set('Pragma''public');
  2017.         $response->headers->set('Cache-Control''maxage=1');
  2018.         $response->headers->set('Content-Disposition'$dispositionHeader);
  2019.         return $response;
  2020.     }
  2021.     #[Route(path'/api/getExcelIndicateurDesactivate'name'cts_web_excelIndicDesac')]
  2022.     public function generateFileExcelIndicateurDesactivate()
  2023.     {
  2024.         $data $this->getDataForExcelDesactivateByProfil();
  2025.         $response $this->generateFileExcelIndicActivite->generateExcel($data);
  2026.         $handle fopen('php://memory''r+');
  2027.         $date = new \DateTime();
  2028.         $format $date->format('m-d-y');
  2029.         $fileName 'Referentiel-Desactive-Action-Sous-action-Activite-Indicateur-au ' $format;
  2030.         rewind($handle);
  2031.         $dispositionHeader $response->headers->makeDisposition(
  2032.             ResponseHeaderBag::DISPOSITION_ATTACHMENT,
  2033.             'CTS restitution le ' $fileName '.xls'
  2034.         );
  2035.         $response->headers->set('Content-Type''text/vnd.ms-excel; charset=utf-8');
  2036.         $response->headers->set('Pragma''public');
  2037.         $response->headers->set('Cache-Control''maxage=1');
  2038.         $response->headers->set('Content-Disposition'$dispositionHeader);
  2039.         return $response;
  2040.     }
  2041.     private function getDataForExcelByProfil()
  2042.     {
  2043.         $em $this->doctrine->getManager();
  2044.         $user $this->getUser();
  2045.         $userRole $this->getUser()->getUtilisateur()->getIdRole();
  2046.         $dataActiviteIndic = [];
  2047.         switch ($userRole) {
  2048.             case 5:
  2049.             case 8:
  2050.                 $listAffectationCts $em->getRepository(RefAffectation::class)->getAffectationByCts($user->getIdFederation()->getIdFederation());
  2051.                 $tabs = [];
  2052.                 foreach ($listAffectationCts as $listAff) {
  2053.                     $tabs[] = $listAff['id_affectation'];
  2054.                 }
  2055.                 if (count($tabs) > 1) {
  2056.                     $InArrayAffectation implode(","$tabs);
  2057.                 } else {
  2058.                     $InArrayAffectation $tabs;
  2059.                 }
  2060.                 $dataActiviteIndic $em->getRepository(RefIndicateur::class)->getActiviteIndicateurActionByFedeForExcel($user->getIdFederation()->getIdFederation(), $InArrayAffectation);
  2061.                 break;
  2062.             case 1:
  2063.             case 3:
  2064.             case 10:
  2065.                 $dataActiviteIndic $em->getRepository(RefIndicateur::class)->getActiviteIndicateurActionByDsForExcel();
  2066.                 break;
  2067.             case 11:
  2068.             case 4:
  2069.                 $listAffectationCts $em->getRepository(UtilisateurInformation::class)->getFederationByDr($user->getIdAffectation()->getIdAffectation());
  2070.                 $tabs = [];
  2071.                 foreach ($listAffectationCts as $listAff) {
  2072.                     $tabs[] = $listAff['id_federation'];
  2073.                 }
  2074.                 if (count($tabs) > 1) {
  2075.                     $InArrayAffectation implode(","$tabs);
  2076.                 } else {
  2077.                     $InArrayAffectation $tabs;
  2078.                 }
  2079.                 $dataActiviteIndic $em->getRepository(RefIndicateur::class)->getActiviteIndicateurActionByDrForExcel($user->getIdAffectation()->getIdAffectation(), $InArrayAffectation);
  2080.                 break;
  2081.         }
  2082.         return $dataActiviteIndic;
  2083.     }
  2084.     private function getDataForExcelDesactivateByProfil()
  2085.     {
  2086.         $em $this->doctrine->getManager();
  2087.         $user $this->getUser();
  2088.         $userRole $this->getUser()->getUtilisateur()->getIdRole();
  2089.         $dataActiviteIndic = [];
  2090.         switch ($userRole) {
  2091.             case 5:
  2092.             case 8:
  2093.                 $listAffectationCts $em->getRepository(RefAffectation::class)->getAffectationByCts($user->getIdFederation()->getIdFederation());
  2094.                 $tabs = [];
  2095.                 foreach ($listAffectationCts as $listAff) {
  2096.                     $tabs[] = $listAff['id_affectation'];
  2097.                 }
  2098.                 if (count($tabs) > 1) {
  2099.                     $InArrayAffectation implode(","$tabs);
  2100.                 } else {
  2101.                     $InArrayAffectation $tabs;
  2102.                 }
  2103.                 $dataActiviteIndic $em->getRepository(RefIndicateur::class)->getActiviteIndicateurActionByFedeForExcelDesactivate($user->getIdFederation()->getIdFederation(), $InArrayAffectation);
  2104.                 break;
  2105.             case 1:
  2106.             case 3:
  2107.             case 10:
  2108.                 $dataActiviteIndic $em->getRepository(RefIndicateur::class)->getActiviteIndicateurActionByDsForExcelDesactivate();
  2109.                 break;
  2110.             case 11:
  2111.             case 4:
  2112.                 $listAffectationCts $em->getRepository(UtilisateurInformation::class)->getFederationByDr($user->getIdAffectation()->getIdAffectation());
  2113.                 $tabs = [];
  2114.                 foreach ($listAffectationCts as $listAff) {
  2115.                     $tabs[] = $listAff['id_federation'];
  2116.                 }
  2117.                 if (count($tabs) > 1) {
  2118.                     $InArrayAffectation implode(","$tabs);
  2119.                 } else {
  2120.                     $InArrayAffectation $tabs;
  2121.                 }
  2122.                 $dataActiviteIndic $em->getRepository(RefIndicateur::class)->getActiviteIndicateurActionByDrForExcelDesactivate($user->getIdAffectation()->getIdAffectation(), $InArrayAffectation);
  2123.                 break;
  2124.         }
  2125.         return $dataActiviteIndic;
  2126.     }
  2127.     #[Route(path'/api/uploadImage/{type}'name'cts_web_upload_image')]
  2128.     public function uploadImage(Request $request$type null)
  2129.     {
  2130.         $message '';
  2131.         $fileName '';
  2132.         $maxSize 1_048_576// 1MB
  2133.         $specific_path $this->getImageSpecificPath($type);
  2134.         $dir $this->getParameter('dir_file_image') . $specific_path;
  2135.         try {
  2136.             $file $request->files->get('upload');
  2137.             if ($this->uploadIsAllowed($file)) {
  2138.                 if ($file->getSize() <= $maxSize) {
  2139.                     $fileName $file->getClientOriginalName();
  2140.                     //Check if the directory already exists.
  2141.                     if (!is_dir($dir)) {
  2142.                         //Directory does not exist, so lets create it.
  2143.                         mkdir($dir0755true);
  2144.                     }
  2145.                     $file->move($dir$fileName);
  2146.                 } else {
  2147.                     $message 'Fichier trop volumineux (1MB max.)';
  2148.                 }
  2149.             } else {
  2150.                 $message 'Format de fichier incorrect';
  2151.             }
  2152.             if (empty($message)) {
  2153.                 $array = ['url' => $dir $fileName'fileName' => $fileName'uploaded' => 1];
  2154.             } else {
  2155.                 $array = ['status' => 0'error' => ['message' => $message]];
  2156.             }
  2157.             $response = new JsonResponse($array\Symfony\Component\HttpFoundation\Response::HTTP_OK);
  2158.             return $response;
  2159.         } catch (\Exception) {
  2160.             $array = ['status' => 0'error' => ['message' => 'Une erreur se produit lors de l\'envoie du fichier']];
  2161.             $response = new JsonResponse($array\Symfony\Component\HttpFoundation\Response::HTTP_BAD_REQUEST);
  2162.             return $response;
  2163.         }
  2164.     }
  2165.     #[Route(path'/api/browseImage/{type}'name'cts_web_browse_image')]
  2166.     public function browseImage($type null): \Symfony\Component\HttpFoundation\Response
  2167.     {
  2168.         $specific_path $this->getImageSpecificPath($type);
  2169.         $uri_file_path $this->getParameter('dir_file_image') . $specific_path;
  2170.         $files glob($uri_file_path "*");
  2171.         $CKEditorFuncNum intval($_GET['CKEditorFuncNum']);
  2172.         $parse_files_name = function ($path) use ($specific_path) {
  2173.             $uri_file_path $this->getParameter('dir_file_image') . $specific_path;
  2174.             return str_replace($uri_file_path''$path);
  2175.         };
  2176.         $files_name array_map($parse_files_name$files);
  2177.         $available_files array_combine($files_name$files);
  2178.         return $this->render(
  2179.             'Image/image_browser.html.twig',
  2180.             ['CKEditorFuncNum' => $CKEditorFuncNum'available_files' => $available_files]
  2181.         );
  2182.     }
  2183.     /**
  2184.      * Check file uploaded extension
  2185.      * @param $file
  2186.      * @return bool
  2187.      */
  2188.     private function uploadIsAllowed($file)
  2189.     {
  2190.         $extension_allowed = ['jpg''jpeg''gif''png''bmp''tiff'];
  2191.         $ext = !is_null($file) ? $file->guessExtension() : '';
  2192.         return isset($file) && in_array($ext$extension_allowed);
  2193.     }
  2194.     private function getImageSpecificPath($type)
  2195.     {
  2196.         if ((is_null($type) || $type == 'default')) {
  2197.             return '';
  2198.         } else {
  2199.             $user $this->getUser();
  2200.             $specific_path $type DIRECTORY_SEPARATOR;
  2201.             $specific_path .= (($type == 'user') ? $user->getIdUtilisateur() . DIRECTORY_SEPARATOR '');
  2202.             return $specific_path;
  2203.         }
  2204.     }
  2205.     /**
  2206.      * XLS Export all entities .
  2207.      */
  2208.     #[Route(path'/api/export_excel_federation'name'ctsweb_export_excel_federation')]
  2209.     public function exportExcelFederation()
  2210.     {
  2211.         error_reporting(E_ERROR E_PARSE);
  2212.         $listFederations = [];
  2213.         $em $this->doctrine->getManager();
  2214.         $refFederations $em->getRepository(RefFederation::class)->findListFederation();
  2215.         try {
  2216.             foreach ($refFederations as $refFederation) {
  2217.                 $listFederations[] = ['lib' => $refFederation["rAdmDiside"], 'libelleLong' => $refFederation["rSerLibl"], 'disciplineActive' => ($refFederation["federationActive"]) ? 'Oui' 'Non''discipline' => $refFederation["rSerLibc"], 'saisonSportive' => $refFederation["saisonSportiveFederation"], 'droitRef' => $refFederation["droitRefFederation"], 'idFederation' => $refFederation["idFederation"], 'federationActive' => $refFederation["federationActive"], 'dateDesactivation' => ''];
  2218.             }
  2219.             $data = ['success' => true'data' => $listFederations];
  2220.         } catch (\Exception $e) {
  2221.             $data = ['success' => false'data' => $e->getMessage()];
  2222.         }
  2223.         $fileName "synthese_federations_" . (new \DateTime())->format("Y-m-d_H_i_s");
  2224.         $response $this->exportExcelFederation->generateExcel(
  2225.             $data
  2226.         );
  2227.         $handle fopen('php://memory''r+');
  2228.         rewind($handle);
  2229.         $dispositionHeader $response->headers->makeDisposition(
  2230.             ResponseHeaderBag::DISPOSITION_ATTACHMENT,
  2231.             "$fileName.xls"
  2232.         );
  2233.         $response->headers->set('Content-Type''text/vnd.ms-excel; charset=utf-8');
  2234.         $response->headers->set('Pragma''public');
  2235.         $response->headers->set('Cache-Control''maxage=1');
  2236.         $response->headers->set('Content-Disposition'$dispositionHeader);
  2237.         return $response;
  2238.     }
  2239. }