<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
use Symfony\Component\Routing\Annotation\Route;
use App\Entity\PlmActiviteIndicAutre;
use App\Entity\RefActivite;
use App\Entity\RefActiviteRefSousAction;
use App\Entity\RefIndicateur;
use App\Entity\RefIndicateurRefActivite;
use App\Entity\RefRole;
use App\Entity\RefPays;
use App\Entity\RefFop;
use App\Entity\RefLieu;
use App\Entity\RefAction;
use App\Entity\RefSousAction;
use App\Entity\RefSousActionRefAction;
use App\Entity\RefGabarit;
use App\Entity\RefContinent;
use App\Entity\RefOdmCadreGeneral;
use App\Entity\Logo;
use App\Entity\Aide;
use App\Entity\RefDiscipline;
use App\Entity\Mission;
use App\Entity\Perimetre;
use App\Entity\PlmActiviteIndic;
use App\Entity\PlmIndicateurAutre;
use App\Entity\PlmActiviteAutre;
use App\Entity\PlmActiviteAutreIndicAutre;
use App\Entity\Workflow;
use App\Entity\RefAffectation;
use App\Entity\Media;
use App\Entity\RefCouleur;
use App\Entity\Parametre;
use App\Entity\Data;
use App\Entity\RefFederation;
use App\Entity\ProjetLettreMission;
use App\Entity\Droit;
use App\Entity\PerimetreRole;
use App\Entity\RoleDroit;
use App\Services\Lib\SpecializedJsonResponse;
use App\Entity\RFederation;
use App\Entity\RefPoste;
use App\Entity\UtilisateurInformation;
use Doctrine\Persistence\ManagerRegistry;
use App\Services\ExportExcelLieu;
use App\Services\ExportExcelFop;
use App\Services\ExportExcel;
use App\Services\ExportExcelDiscipline;
use App\Services\CloneLastPlm;
use App\Services\GenerateFileExcelIndicActivite;
use App\Services\ExportExcelFederation;
/**
* Administration controller.
*
*/
class AdministrationController extends AbstractController
{
private ManagerRegistry $doctrine;
private SpecializedJsonResponse $specializedJsonResponse;
private ExportExcelLieu $exportLieu;
private ExportExcelFop $exportExcelFop;
private ExportExcel $exportExcel;
private ExportExcelDiscipline $exportExcelDiscipline;
private CloneLastPlm $cloneLastPlm;
private GenerateFileExcelIndicActivite $generateFileExcelIndicActivite;
private ExportExcelFederation $exportExcelFederation;
public function __construct(SpecializedJsonResponse $specializedJsonResponse, ManagerRegistry $doctrine, ExportExcelLieu $exportLieu, ExportExcel $exportExcel, ExportExcelFop $exportExcelFop, ExportExcelDiscipline $exportExcelDiscipline, CloneLastPlm $cloneLastPlm, GenerateFileExcelIndicActivite $generateFileExcelIndicActivite, ExportExcelFederation $exportExcelFederation)
{
$this->doctrine = $doctrine;
$this->specializedJsonResponse = $specializedJsonResponse;
$this->exportLieu = $exportLieu;
$this->exportExcel = $exportExcel;
$this->exportExcelFop = $exportExcelFop;
$this->exportExcelDiscipline = $exportExcelDiscipline;
$this->cloneLastPlm = $cloneLastPlm;
$this->generateFileExcelIndicActivite = $generateFileExcelIndicActivite;
$this->exportExcelFederation = $exportExcelFederation;
}
#[Route(path: '/api/liste_filtre_onglet', name: 'cts_liste_filtre')]
public function listeForFiltre()
{
try {
$em = $this->doctrine->getManager();
$repositoryRA = $em->getRepository(RefAffectation::class);
$resultRa = $repositoryRA->getAffectationEnabled();
$resultRa2 = $repositoryRA->getAffectationAdmin();
$repositoryFed = $em->getRepository(RFederation::class);
$resultFed = $repositoryFed->getDisciplineList();
$resultatEtatOM = [];
$resultatEtatLM = [];
$resultatEtatFO = [];
$listeEtat = $em->getRepository(Workflow::class)->findAll();
foreach ($listeEtat as $etat) {
// filtre des annulations
if ($etat->getIdWorkflow() === Workflow::LM_CREATION) {
continue;
}
switch ($etat->getCategorie()) {
case 'OM':
$resultatEtatOM[] = ['id' => $etat->getIdWorkflow(), 'libelle' => $etat->getLibelleAction(), 'etape' => $etat->getEtape()];
break;
case 'LM':
$resultatEtatLM[] = ['id' => $etat->getIdWorkflow(), 'libelle' => $etat->getLibelleAction(), 'etape' => $etat->getEtape()];
break;
case 'FO':
$resultatEtatFO[] = ['id' => $etat->getIdWorkflow(), 'libelle' => $etat->getLibelleAction(), 'etape' => $etat->getEtape()];
break;
}
}
$region = [['id' => 1, 'libelle' => 'Om international'], ['id' => 2, 'libelle' => 'Om UE'], ['id' => 3, 'libelle' => 'Om France']];
$repositoryFop = $em->getRepository(RefPoste::class);
$resultFop = $repositoryFop->getListePoste();
$dataFiltre = ['affectation' => $resultRa, 'affectation_admin' => $resultRa2, 'federation' => $resultFed, 'fop' => $resultFop, 'etat' => $resultatEtatOM, 'statut' => $resultatEtatLM, 'region' => $region, 'status_formation' => $resultatEtatFO];
$success = true;
} catch (\Exception $e) {
$success = false;
$dataFiltre = $e->getMessage();
}
return $this->specializedJsonResponse->getJson($success, $dataFiltre);
}
#[Route(path: '/api/liste_filtre_onglet_lm', name: 'cts_liste_filtre_lm')]
public function listeForFiltreLM()
{
try {
$em = $this->doctrine->getManager();
$repositoryRA = $em->getRepository(RefAffectation::class);
$resultRa = $repositoryRA->getAffectationEnabled();
$resultRa2 = $repositoryRA->getAffectationAdmin();
$repositoryFed = $em->getRepository(RFederation::class);
$resultFed = $repositoryFed->getDisciplineList();
$resultatEtatOM = [];
$resultatEtatLM = [];
$listeEtat = $em->getRepository(Workflow::class)->findAll();
foreach ($listeEtat as $etat) {
// filtre des annulations
if ($etat->getIdWorkflow() === Workflow::LM_CREATION || $etat->getIdWorkflow() === Workflow::LM_ANNULATION || $etat->getIdWorkflow() === Workflow::LM_SIGNEE) {
continue;
}
switch ($etat->getCategorie()) {
case 'OM':
$resultatEtatOM[] = ['id' => $etat->getIdWorkflow(), 'libelle' => $etat->getLibelleAction(), 'etape' => $etat->getEtape()];
break;
case 'LM':
$resultatEtatLM[] = ['id' => $etat->getIdWorkflow(), 'libelle' => $etat->getLibelleAction(), 'etape' => $etat->getEtape()];
break;
}
}
$region = [['id' => 1, 'libelle' => 'Om international'], ['id' => 2, 'libelle' => 'Om UE'], ['id' => 3, 'libelle' => 'Om France']];
$repositoryFop = $em->getRepository(RefPoste::class);
$resultFop = $repositoryFop->getListePoste();
$dataFiltre = ['affectation' => $resultRa, 'affectation_admin' => $resultRa2, 'federation' => $resultFed, 'fop' => $resultFop, 'etat' => $resultatEtatOM, 'statut' => $resultatEtatLM, 'region' => $region];
$success = true;
} catch (\Exception $e) {
$success = false;
$dataFiltre = $e->getMessage();
}
return $this->specializedJsonResponse->getJson($success, $dataFiltre);
}
#[Route(path: '/api/admin/listeRegions', name: 'admin_liste_regions')]
public function ListeRegions()
{
try {
$repositoryRA = $this->doctrine->getManager()->getRepository(RefAffectation::class);
$result = $repositoryRA->findDonneesAdmin();
$data = ($result ?? []);
$success = true;
} catch (\Exception $e) {
$success = false;
$data = $e->getMessage();
error_log($e->getMessage());
}
return $this->specializedJsonResponse->getJson($success, $data);
}
/**
* Modifie le nom et le code d'une région.
*/
#[Route(path: '/api/admin/modifierRegion', name: 'admin_modifier_regions', methods: ['GET', 'POST'])]
public function ModifierRegion(Request $request)
{
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
$em = $this->doctrine->getManager();
try {
$region = $em->getRepository(RefAffectation::class)->findOneBy(['idAffectation' => $data['region']['id']]);
$region->setLibelleLong($data['region']['libelle'])
->setCodeRegion($data['region']['numero']);
$em->persist($region);
$em->flush();
$data = ['success' => true, 'data' => "Région modifiée"];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
#[Route(path: '/api/admin/listePays', name: 'admin_liste_pays')]
public function ListePays()
{
try {
$repositoryRP = $this->doctrine->getManager()->getRepository(RefPays::class);
$listePays = $repositoryRP->findDonneesAdmin();
$data = ['success' => true, 'data' => ($listePays ?? [])];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
/**
* Modifie le nom et le code d'un pays.
*/
#[Route(path: '/api/admin/modifierPays', name: 'admin_modifier_pays', methods: ['GET', 'POST'])]
public function ModifierPays(Request $request)
{
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
$em = $this->doctrine->getManager();
try {
$ancienPays = $em->getRepository(RefPays::class)->findOneBy(['idPays' => $data['pays']['id']]);
$ancienPays->setDateDesactivation(new \DateTime());
$refPays = new RefPays();
$refPays->setLibellePays(ucwords((string) $data['pays']['libelle']))
->setCodeIso2(strtoupper((string) $data['pays']['iso2']))
->setCodeIso3(strtoupper((string) $data['pays']['iso3']))
->setCodeInterne($data['pays']['code'])
->setIdContinent($em->find(RefContinent::class, $data['pays']['continent']))
->setUnionEuropeenne($data['pays']['ue'])
->setDateActivation(new \DateTime());
$em->persist($ancienPays);
$em->persist($refPays);
$em->flush();
$data = ['success' => true, 'data' => "Pays modifié"];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
#[Route(path: '/api/admin/newPays', name: 'admin_ajouter_pays')]
public function AjouterPays(Request $request)
{
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
$em = $this->doctrine->getManager();
try {
$refPays = new RefPays();
$nomsPays = json_decode((string) $this->ListePays()->getContent(), null, 512, JSON_THROW_ON_ERROR);
$listePaysBDD = [];
foreach ($nomsPays as $nomPays) {
if ($nomPays !== true) {
foreach ($nomPays as $paysvalues) {
$listePaysBDD[] = $paysvalues->libellePays;
}
}
}
if (!in_array($data['pays']['libelle'], $listePaysBDD)) {
$refPays->setLibellePays(ucwords((string) $data['pays']['libelle']))
->setCodeIso2(strtoupper((string) $data['pays']['iso2']))
->setCodeIso3(strtoupper((string) $data['pays']['iso3']))
->setCodeInterne($data['pays']['code'])
->setIdContinent($em->getRepository(RefContinent::class)->find($data['pays']['continent']))
->setUnionEuropeenne($data['pays']['ue'])
->setDateActivation(new \DateTime());
$em->persist($refPays);
$em->flush();
$data = ['success' => true, 'data' => "Pays créé"];
} else {
$data = ['success' => false, 'data' => "Ce pays est déjà enregistré"];
}
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
#[Route(path: '/api/admin/supprimerPays/{id}', name: 'admin_supprimer_pays')]
public function SupprimerPays($id)
{
$em = $this->doctrine->getManager();
try {
$pays = $em->getRepository(RefPays::class)->findOneBy(['idPays' => $id]);
$pays->setDateDesactivation(new \DateTime());
$em->persist($pays);
$em->flush();
$data = ['success' => true, 'data' => 'Pays supprimé'];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
#[Route(path: '/api/admin/listeFop', name: 'admin_liste_fop')]
public function ListeFop()
{
try {
$repositoryRF = $this->doctrine->getManager()->getRepository(RefFop::class);
$result = $repositoryRF->findDonneesAdmin();
$data = ['success' => true, 'data' => $result];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
/**
* Modifie le nom et le code d'un pays.
*/
#[Route(path: '/api/admin/modifierFop', name: 'admin_modifier_fop', methods: ['GET', 'POST'])]
public function ModifierFop(Request $request)
{
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
$em = $this->doctrine->getManager();
try {
$fop = $em->getRepository(RefFop::class)->findOneBy(['idFop' => $data['fop']['id']]);
if (strlen((string) $data['fop']['libelle']) <= 256) {
$fop->setLibelleFop($data['fop']['libelle']);
$em->persist($fop);
$em->flush();
$data = "Fonctions Opérationnelles Principales créée";
} else {
$data = "La Fonctions Opérationnelles Principales ne peut pas dépasser 256 caractères";
}
$data = ['success' => true, 'data' => $data];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
#[Route(path: '/api/admin/newFop', name: 'admin_ajouter_fop')]
public function AjouterFop(Request $request)
{
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
$em = $this->doctrine->getManager();
try {
$refFop = new RefFop();
if (strlen((string) $data['fop']['libelle']) <= 256) {
$refFop->setLibelleFop($data['fop']['libelle']);
$refFop->setDateActivation(new \DateTime());
$em->persist($refFop);
$em->flush();
$data = "Fonctions Opérationnelles Principales créée";
} else {
$data = "La Fonctions Opérationnelles Principales ne peut pas dépasser 256 caractères";
}
$data = ['success' => true, 'data' => $data];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
#[Route(path: '/api/admin/supprimerFop/{id}', name: 'admin_supprimer_fop')]
public function SupprimerFop($id)
{
$em = $this->doctrine->getManager();
$fop = $em->getRepository(RefFop::class)->findOneBy(['idFop' => $id]);
try {
$fop->setDateDesactivation(new \DateTime());
$fop->setDateActivation(null);
$em->persist($fop);
$em->flush();
$data = ['success' => true, 'data' => 'FOP supprimée'];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
#[Route(path: '/api/export_all_lieu', name: 'cts_web_lieu_export')]
public function exportLieu()
{
$em = $this->doctrine->getManager();
$lieus = $em->getRepository(RefLieu::class)->findAll();
$response = $this->exportLieu->generateExcel($lieus);
$handle = fopen('php://memory', 'r+');
$fileName = 'Export-Lieu';
rewind($handle);
$dispositionHeader = $response->headers->makeDisposition(
ResponseHeaderBag::DISPOSITION_ATTACHMENT,
$fileName . '.xls'
);
$response->headers->set('Content-Type', 'text/vnd.ms-excel; charset=utf-8');
$response->headers->set('Pragma', 'public');
$response->headers->set('Cache-Control', 'maxage=1');
$response->headers->set('Content-Disposition', $dispositionHeader);
return $response;
}
#[Route(path: '/api/export_all_actions', name: 'cts_web_actions_export')]
public function exportactions()
{
$em = $this->doctrine->getManager();
$actions = $em->getRepository(RefAction::class)->findAll();
$response = $this->exportExcel->generateExcelActions($actions);
$handle = fopen('php://memory', 'r+');
$fileName = 'Export-Actions';
rewind($handle);
$dispositionHeader = $response->headers->makeDisposition(
ResponseHeaderBag::DISPOSITION_ATTACHMENT,
$fileName . '.xls'
);
$response->headers->set('Content-Type', 'text/vnd.ms-excel; charset=utf-8');
$response->headers->set('Pragma', 'public');
$response->headers->set('Cache-Control', 'maxage=1');
$response->headers->set('Content-Disposition', $dispositionHeader);
return $response;
}
#[Route(path: '/api/export_all_fop', name: 'cts_web_fop_export')]
public function exportFop()
{
$em = $this->doctrine->getManager();
$fops = $em->getRepository(RefFop::class)->findAll();
$response = $this->exportExcelFop->generateExcel($fops);
$handle = fopen('php://memory', 'r+');
$fileName = 'Export-Fop';
rewind($handle);
$dispositionHeader = $response->headers->makeDisposition(
ResponseHeaderBag::DISPOSITION_ATTACHMENT,
$fileName . '.xls'
);
$response->headers->set('Content-Type', 'text/vnd.ms-excel; charset=utf-8');
$response->headers->set('Pragma', 'public');
$response->headers->set('Cache-Control', 'maxage=1');
$response->headers->set('Content-Disposition', $dispositionHeader);
return $response;
}
#[Route(path: '/api/export_all_sousactions', name: 'cts_web_sousactions_export')]
public function exportsousactions()
{
$em = $this->doctrine->getManager();
$sousactions = $em->getRepository(RefSousAction::class)->findAll();
$response = $this->exportExcel->generateExcelSousActions($sousactions);
$handle = fopen('php://memory', 'r+');
$fileName = 'Export-Sous-Actions';
rewind($handle);
$dispositionHeader = $response->headers->makeDisposition(
ResponseHeaderBag::DISPOSITION_ATTACHMENT,
$fileName . '.xls'
);
$response->headers->set('Content-Type', 'text/vnd.ms-excel; charset=utf-8');
$response->headers->set('Pragma', 'public');
$response->headers->set('Cache-Control', 'maxage=1');
$response->headers->set('Content-Disposition', $dispositionHeader);
return $response;
}
#[Route(path: '/api/action_admin_etat_supprimer', name: 'cts_web_action_etat')]
public function getListactionetat()
{
try {
$em = $this->doctrine->getManager();
$result = [];
$actions = $em->getRepository(RefAction::class)->findBy(['actionActive' => true], ["numAction" => "ASC"]);
foreach ($actions as $action) {
$result[] = ["id" => $action->getIdAction(), "code" => $action->getLibelleActionCourt(), "libelle" => $action->getLibelleActionLong(), "numero" => $action->getNumAction(), "couleur" => $action->getColor()];
}
$data = ['success' => true, 'data' => $result];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
#[Route(path: '/api/action_admin_etat', name: 'cts_web_action_admin')]
public function getAllListe()
{
try {
$em = $this->doctrine->getManager();
$result = [];
$actions = $em->getRepository(RefAction::class)->findBy([], ["numAction" => "ASC"]);
foreach ($actions as $action) {
$result[] = ["id" => $action->getIdAction(), "code" => $action->getLibelleActionCourt(), "libelle" => $action->getLibelleActionLong(), "numero" => $action->getNumAction(), "couleur" => $action->getColor(), "etat" => ($action->getActionActive()) ? true : false, "date_desactivation" => ''];
}
$data = ['success' => true, 'data' => $result];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
#[Route(path: '/api/liste_action_admin', name: 'admin_action_liste')]
public function listeAction()
{
$result = [];
try {
$repositoryRA = $this->doctrine->getManager()->getRepository(RefAction::class);
$actions = $repositoryRA->findBy(['actionActive' => true], ['numAction' => "ASC"]);
foreach ($actions as $action) {
$result[] = ["id" => $action->getIdAction(), "code" => $action->getLibelleActionCourt(), "libelle" => $action->getLibelleActionLong(), "numero" => $action->getNumAction(), "couleur" => $action->getColor()];
}
$data = ['success' => true, 'data' => isset($result[0]) ? $result : []];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
private function deleteActivity(RefAction $action)
{
$listSousAction = $action->getIdSousAction();
$em = $this->doctrine->getManager();
$date = new \DateTime();
foreach ($listSousAction as $sousAction) {
if ($sousAction instanceof RefSousAction) {
$sousAction->setDateDesactivation($date);
$em->persist($sousAction);
$em->flush();
}
}
}
#[Route(path: '/api/delete_action_admin/{id}', name: 'admin_action_delete')]
public function deleteAction($id)
{
$em = $this->doctrine->getManager();
$action = $em->getRepository(RefAction::class)->findOneBy(['idAction' => $id]);
try {
$action->setActionActive(false);
$this->deleteRefSousAction($action);
$em->persist($action);
$this->deleteActivity($action);
$em->flush();
$data = ['success' => true, 'data' => 'Action supprimée'];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
private function deleteRefSousAction(RefAction $action)
{
$em = $this->doctrine->getManager();
$lisRefSousActionAction = $em->getRepository(RefSousActionRefAction::class)->findBy(['idAction' => $action->getIdAction()]);
foreach ($lisRefSousActionAction as $refActionSousAction) {
$refActionSousAction->setSousActionActive(false);
$refActionSousAction->setSousActionDateFin(new \DateTime('now'));
$em->persist($refActionSousAction);
}
}
#[Route(path: '/api/change_color_action_admin/{id}/couleur/{couleur}', name: 'admin_action_change_color')]
public function changeColorAction($id, $couleur)
{
$em = $this->doctrine->getManager();
$action = $em->getRepository(RefAction::class)->findOneBy(['idAction' => $id]);
try {
$action->setColor("#$couleur");
$em->persist($action);
$em->flush();
$data = ['success' => true, 'data' => 'Couleur modifiée'];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
#[Route(path: '/api/new_action_admin', name: 'admin_new_action')]
public function newAction(Request $request)
{
try {
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
$action = new RefAction();
$em = $this->doctrine->getManager();
$oAction = $em->getRepository(RefAction::class)->findOneBy(['numAction' => $data['action']['numero'], 'actionActive' => true]);
if (!$oAction) {
$action->setColor($data['action']['couleur']);
$action->setLibelleActionCourt(strtoupper((string) $data['action']['code']));
$action->setLibelleActionLong($data['action']['libelle']);
$action->setNumAction($data['action']['numero']);
$em->persist($action);
$em->flush();
$data = ['success' => true, 'data' => 'Action créée'];
} else {
$data = ['success' => false, 'data' => 'L\'action existe déjà '];
}
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
#[Route(path: '/api/get_action_admin/{id}', name: 'admin_get_action')]
public function getAction($id)
{
$em = $this->doctrine->getManager();
$action = $em->getRepository(RefAction::class)->findOneBy(['idAction' => $id]);
try {
$actionAdmin = ["id" => $action->getIdAction(), "numero" => $action->getNumAction(), "libelle" => $action->getLibelleActionLong(), "code" => $action->getLibelleActionCourt(), "couleur" => $action->getColor()];
$data = ['success' => true, 'data' => $actionAdmin];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
#[Route(path: '/api/edit_action_admin', name: 'admin_edit_action')]
public function editAction(Request $request)
{
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
$em = $this->doctrine->getManager();
$action = $em->getRepository(RefAction::class)->findOneBy(['idAction' => $data['action']['id']]);
$action->setColor($data['action']['couleur'])
->setLibelleActionCourt(strtoupper((string) $data['action']['code']))
->setLibelleActionLong($data['action']['libelle'])
->setNumAction($data['action']['numero']);
try {
$em->persist($action);
$em->flush();
$data = ['success' => true, 'data' => 'Action modifiée'];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
#[Route(path: '/api/new_sous_action_admin', name: 'admin_new_sous_action')]
public function newSousAction(Request $request)
{
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
$em = $this->doctrine->getManager();
try {
$action = $em->getRepository(RefAction::class)->findOneBy(['idAction' => $data['sousAction']['action']]);
$sousAction = new RefSousAction();
$sousAction->setLibelleSousActionCourt(strtoupper((string) $data['sousAction']['code']))
->setLibelleSousActionLong($data['sousAction']['libelle'])
->setPosition($data['sousAction']['position']);
$em->persist($sousAction);
$refSaction = new RefSousActionRefAction();
$refSaction->setIdAction($action)
->setSousActionActive(true)
->setSousActionDateDebut(new \DateTime())
->setIdSousAction($sousAction);
$em->persist($refSaction);
//Création d'une activité vide
//Activité
$refAffecNatinal = 1;
$activite = new RefActivite();
$activite->setLibelleActivite('0-Aucune Action');
$activite->setMasquerLibelle(true);
$activite->setIdAffectation($refAffecNatinal);
$em->persist($activite);
//Indicateur
$indicateur = new RefIndicateur();
$indicateur->setLibelleIndicateur('');
$em->persist($indicateur);
$em->flush();
//Liaison activité - sous action - action
$activiteSousAction = new RefActiviteRefSousAction();
$activiteSousAction->setIdActivite($activite);
$activiteSousAction->setIdSousAction($sousAction);
$activiteSousAction->setIdAction($action);
$activiteSousAction->setActiviteActive(true);
$activiteSousAction->setActiviteDateDebut(new \DateTime());
$em->persist($activiteSousAction);
//Liaison activité - indicateur - sous action - action
$indicateurActivite = new RefIndicateurRefActivite();
$indicateurActivite->setIdActivite($activite->getIdActivite());
$indicateurActivite->setIdIndicateur($indicateur->getIdIndicateur());
$indicateurActivite->setIdSousAction($sousAction->getIdSousAction());
$indicateurActivite->setIdAction($action->getIdAction());
$indicateurActivite->setIndicateurActif(true);
$indicateurActivite->setIndicateurDateDebut(new \DateTime());
$em->persist($indicateurActivite);
$em->flush();
$data = ['success' => true, 'data' => 'Sous action créée'];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
#[Route(path: '/api/get_liste_sous_action_complete', name: 'admin_get_liste_sous_action_complete')]
public function getListeSousActionComplete()
{
$repositoryRSARA = $this->doctrine->getManager()->getRepository(RefSousActionRefAction::class);
try {
foreach ($repositoryRSARA->getListeSousActionComplete() as $sousAction) {
$sousActionComplete[] = ["id" => $sousAction["idSousAction"], "libelle" => $sousAction["libelleSousActionLong"]];
}
$data = ['success' => true, 'data' => $sousActionComplete];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
#[Route(path: '/api/delete_sous_action_admin/{id}', name: 'admin_sous_action_delete')]
public function deleteSousAction($id)
{
$em = $this->doctrine->getManager();
$sousAction = $em->getRepository(RefSousActionRefAction::class)->findOneBy(['idSousAction' => $id]);
$refSousAction = $em->getRepository(RefSousAction::class)->findOneBy(['idSousAction' => $id]);
try {
$em->getRepository(RefSousActionRefAction::class)->updateSousActionByCodeAndAction($sousAction, false);
$em->getRepository(RefSousAction::class)->updateSousAction($sousAction);
$plmRepo = $em->getRepository(ProjetLettreMission::class);
$listeActivite = $plmRepo->getActiviteBySousAction($id);
$activites = [];
foreach ($listeActivite as $activite) {
$activites[] = $activite['id_activite'];
}
if (sizeof($activites) > 0) {
$plmRepo->deleteActiviteToPlm($activites);
}
$listePlmActAutreInd = $plmRepo->getActiviteAutreBySousAction($id);
$activitesAutre = [];
foreach ($listePlmActAutreInd as $actiAutre) {
$plmRepo->deleteActiAutreIndic($actiAutre['id_act_autre']);
if (!in_array($actiAutre['id_act_autre'], $activitesAutre)) {
$activitesAutre[] = $actiAutre['id_act_autre'];
}
}
$plmRepo->deleteActiviteAutreBySousAction($id);
$listePlm = $plmRepo->plmEnCoursModifSupHierachiqueByActiAndSousAction($activites, $id);
if (sizeof($listePlm) > 0) {
$this->etapePrecedentePlmSuperieurHierachique($listePlm, $activites, $activitesAutre);
}
$data = ['success' => true, 'data' => 'Sous action supprimée'];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
#[Route(path: '/api/get_sous_action_admin/{id}', name: 'admin_get_sous_action')]
public function getSousAction($id)
{
$em = $this->doctrine->getManager();
$sousAction = $em->getRepository(RefSousAction::class)->findOneBy(['idSousAction' => $id]);
try {
$sousActionAdmin = ["id" => $sousAction->getIdSousAction(), "libelle" => $sousAction->getLibelleSousActionLong(), "code" => $sousAction->getLibelleSousActionCourt(), "position" => $sousAction->getPosition()];
$data = ['success' => true, 'data' => $sousActionAdmin];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
#[Route(path: '/api/edit_sous_action_admin', name: 'admin_edit_sous_action')]
public function editSousAction(Request $request)
{
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
$em = $this->doctrine->getManager();
$sousAction = $em->getRepository(RefSousAction::class)->findOneBy(['idSousAction' => $data['sousAction']['id']]);
$sousAction->setLibelleSousActionCourt(strtoupper((string) $data['sousAction']['code']))
->setLibelleSousActionLong($data['sousAction']['libelle'])
->setPosition($data['sousAction']['position']);
try {
$em->persist($sousAction);
$em->flush();
$data = ['success' => true, 'data' => 'Sous action modifiée'];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
#[Route(path: '/api/change_liste_sous_action', name: 'admin_change_liste_sous_action')]
public function changeListeSousAction(Request $request)
{
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
$listeSousAction = $data['listeSousAction'];
$em = $this->doctrine->getManager();
try {
for ($i = 1; $i <= (is_countable($listeSousAction) ? count($listeSousAction) : 0); $i++) {
$sousAction = $em->getRepository(RefSousAction::class)->findOneBy(['idSousAction' => $listeSousAction[$i - 1]['idSousAction']]);
$sousAction->setPosition($i);
$em->persist($sousAction);
$em->flush();
}
$data = ['success' => true, 'data' => 'Ordre des sous action modifiée'];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
#[Route(path: '/api/get_liste_continent', name: 'admin_get_liste_continent')]
public function getListeContinent()
{
$result = [];
try {
$repositoryRC = $this->doctrine->getManager()->getRepository(RefContinent::class);
$continents = $repositoryRC->findAll();
foreach ($continents as $continent) {
$result[] = ["id" => $continent->getIdContinent(), "libelle" => $continent->getLibelleContinent()];
}
$data = ['success' => true, 'data' => $result];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
#[Route(path: '/api/get_adresse_gabarit', name: 'admin_get_adresse_gabarit')]
public function getAdresseGabarit()
{
$adresse = null;
$em = $this->doctrine->getManager();
$idUser = $this->getUser()->getIdUtilisateur();
$refRole = $this->getUser()->getUtilisateur()->getIdRole();
$affectation = $this->getUser()->getIdAffectation();
$federation = $this->getUser()->getIdFederation();
try {
$repositoryRG = $this->doctrine->getManager()->getRepository(RefGabarit::class);
switch ($refRole) {
case RefRole::ROLE_FEDE:
case RefRole::ROLE_FEDE_INVITE:
$adresse = $repositoryRG->getDetailsGabaritDTN($federation->getIdFederation());
break;
case RefRole::ROLE_DS_ADMIN:
case RefRole::ROLE_DS_INVITE:
case RefRole::ROLE_DS_SIGNATAIRE:
$adresse = $repositoryRG->getDetailsGabaritDS();
break;
case RefRole::ROLE_DR_SIGNATAIRE:
case RefRole::ROLE_DR:
$adresse = $repositoryRG->getDetailsGabaritDR($affectation->getIdAffectation());
break;
}
if (!is_null($adresse) && !is_bool($adresse)) {
$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()];
} else {
$return = null;
}
$data = ['success' => true, 'data' => $return];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
#[Route(path: '/api/admin/newGabarit', name: 'admin_gabarit')]
public function newGabarit(Request $request)
{
$affectation = null;
$federation = null;
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
$user = $this->getUser();
$userRole = $user->getUtilisateur()->getIdRole();
$em = $this->doctrine->getManager();
$repositoryRG = $em->getRepository(RefGabarit::class);
switch ($userRole) {
case RefRole::ROLE_FEDE:
case RefRole::ROLE_FEDE_INVITE:
$federation = $this->getUser()->getIdFederation();
$affectation = $this->getUser()->getIdAffectation();
break;
case RefRole::ROLE_DS_ADMIN:
case RefRole::ROLE_DS_INVITE:
case RefRole::ROLE_DS_SIGNATAIRE:
case RefRole::ROLE_DR_SIGNATAIRE:
case RefRole::ROLE_DR:
$federation = null;
$affectation = $this->getUser()->getIdAffectation();
break;
}
/**
* CTS-12 Valider la présence de ; et non de ,
*/
$field_emails = ['email', 'emailOdm', 'emailConges', 'emailLm', 'emailFo'];
foreach ($field_emails as $field) {
if (isset($data['gabarit'][$field]) && !empty($data['gabarit'][$field])) {
$matches = array();
if (!preg_match_all("/^(([^;,]+)([;]\W)?)+$/", $data['gabarit'][$field], $matches)) {
$data = array(
'success' => false,
'data' => 'Les adresses emails doivent être séparées par un point-virgule et un espace.<br />'
);
return new JsonResponse($data);
}
}
}
$postalCodePattern = '/^(?:[0-8]\d|9[0-8])\d{3}$/';
if (isset($data['gabarit']['cp']) && !empty($data['gabarit']['cp'])) {
if (!preg_match($postalCodePattern, $data['gabarit']['cp'])) {
$data = array(
'success' => false,
'data' => 'Code postal invalide.<br />'
);
return new JsonResponse($data);
}
}
try {
$logo = $data['gabarit']['logo'];
$ancienGabarit = $repositoryRG->findOneBy(["dateDesactivation" => null, "idAffectation" => $affectation], ['idGabarit' => 'DESC']);
$gabarit = new RefGabarit();
$gabarit->setAdresse($data['gabarit']['adresse'])
->setAdresseSuite($data['gabarit']['suite'])
->setCp($data['gabarit']['cp'])
->setDirection($data['gabarit']['direction'])
->setEmail($data['gabarit']['email'])
->setEmailOdm($data['gabarit']['emailOdm'])
->setEmailConges($data['gabarit']['emailConges'])
->setEmailLm($data['gabarit']['emailLm'])
->setEmailFo($data['gabarit']['emailFo'])
->setLogo("marianne.gif")
->setFax($data['gabarit']['fax'])
->setTel($data['gabarit']['tel'])
->setEntete($data['gabarit']['entete'])
->setVille($data['gabarit']['ville'])
->setIdAffectation($affectation)
->setIdFederation($federation);
if ($ancienGabarit != null) {
$gabarit->setLogo("marianne.gif");
$em->persist($ancienGabarit);
$em->flush();
} else {
$gabarit->setLogo("marianne.gif");
}
$em->persist($gabarit);
$em->flush();
$data = ['success' => true, 'data' => 'Gabarit modifié'];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
#[Route(path: '/api/media', name: 'cts_web_media')]
public function uploadFileAction(Request $request)
{
$logo = new Logo();
$form = $this->createForm(\App\Form\LogoType::class, $logo);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->doctrine->getManager();
$em->persist($logo);
$em->flush();
$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()];
} else {
$env = ["idUpload" => '', "msgUploadOK" => '', "msgUpload" => (string) $form->getErrors(true, false), "urlFile" => ''];
}
return new JsonResponse($env);
}
#[Route(path: '/api/delete_upload_media', name: 'media_delete')]
public function deleteUpload(Request $request)
{
try {
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
$request->request->replace(is_array($data) ? $data : []);
$params = $request->request->all();
$idFileUpload = $params['delete_fileUpload']['idFileUpload'];
$em = $this->doctrine->getManager();
$media = $em->getRepository(Media::class)->find($idFileUpload);
if ($media) {
$em->remove($media);
$em->flush();
}
$data = ['success' => true, 'data' => $media->getId() . 'a été supprimé'];
return new JsonResponse($data);
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
return new JsonResponse($data);
}
}
#[Route(path: '/api/listeColor', name: 'admin_liste_color')]
public function listeColor()
{
try {
$em = $this->doctrine->getManager();
$colors = $em->getRepository(RefCouleur::class)->findListeByOrder();
$tabColors = [];
$signature = $em->getRepository(Parametre::class)->find(2);
$delai = $em->getRepository(Parametre::class)->find(3);
$flagRapport = $em->getRepository(Parametre::class)->find(1);
foreach ($colors as $color) {
$tabColors[] = ['id' => $color->getIdCouleur(), 'libelle' => $color->getLibelle(), 'color' => $color->getCouleurFond()];
}
$data = ['success' => true, 'data' => $tabColors, 'signature' => $signature->getValue(), 'delai' => $delai->getValue(), 'flagRapport' => $flagRapport->getValue()];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
#[Route(path: '/api/editColor', name: 'admin_edit_color')]
public function editColorEvent(Request $request)
{
try {
$em = $this->doctrine->getManager();
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
$request->request->replace(is_array($data) ? $data : []);
$params = $request->request->all();
$tabColor = null;
$color = $em->getRepository(RefCouleur::class)->find($params['idLine']);
if ($color) {
$color->setCouleurFond($params['color']);
$em->persist($color);
$em->flush();
$tabColor = "Mise à jour a été effectuée avec succes";
}
$data = ['success' => true, 'data' => $tabColor];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
#[Route(path: '/api/updSignature', name: 'cts_upd_signature')]
public function editTracageSignature()
{
try {
$em = $this->doctrine->getManager();
$signature = $em->getRepository(Parametre::class)->find(2);
if ($signature->getValue() == 'true') {
$signature->setValue(' ');
} else {
$signature->setValue('true');
}
$em->persist($signature);
$em->flush();
$data = ['success' => true, 'data' => 'Succes'];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
#[Route(path: '/api/updDelai', name: 'cts_upd_delai')]
public function editDelaiBlocage(Request $request)
{
try {
$em = $this->doctrine->getManager();
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
$request->request->replace(is_array($data) ? $data : []);
$params = $request->request->all();
$delai = $em->getRepository(Parametre::class)->find(3);
$delai->setValue($params['delai']);
$em->persist($delai);
$em->flush();
$data = ['success' => true, 'data' => 'Succes'];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
#[Route(path: '/api/updFlag', name: 'cts_upd_flag')]
public function editFlag()
{
try {
$em = $this->doctrine->getManager();
$flag = $em->getRepository(Parametre::class)->find(1);
if ($flag->getValue() == 'true') {
$flag->setValue(' ');
} else {
$flag->setValue('true');
}
$em->persist($flag);
$em->flush();
$data = ['success' => true, 'data' => 'Succes'];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
#[Route(path: '/api/get_message_accueil_admin', name: 'message_accueil_admin')]
public function getMessageAccueil()
{
try {
$repositoryD = $this->doctrine->getManager()->getRepository(Data::class);
$message = $repositoryD->findAll();
$retour = ["id" => $message[0]->getIdData(), "contenu" => $message[0]->getDataContent()];
$data = ['success' => true, 'data' => $retour];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
#[Route(path: '/api/admin/editMessageAccueil', name: 'edit_message_accueil_admin')]
public function editMessageAccueil(Request $request)
{
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
$em = $this->doctrine->getManager();
$message = $em->getRepository(Data::class)->findAll()[0];
$message->setDataContent($data['message']['message']);
try {
$em->persist($message);
$em->flush();
$data = ['success' => true, 'data' => 'Message d\'accueil modifié'];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
#[Route(path: '/api/get_profil_admin', name: 'get_profil_admin')]
public function getProfilAdmin()
{
$em = $this->doctrine->getManager();
$retour = [];
try {
$repositoryRR = $em->getRepository(RefRole::class);
$repositoryP = $em->getRepository(Perimetre::class);
$repositoryD = $em->getRepository(Droit::class);
$repositoryPR = $em->getRepository(PerimetreRole::class);
$repositoryRD = $em->getRepository(RoleDroit::class);
$refRole = $repositoryRR->findAll();
foreach ($refRole as $role) {
$arrayPerimetre = [];
$arrayDroit = [];
$refPerimetre = $repositoryP->findAll();
foreach ($refPerimetre as $perimetre) {
if ($perimetre->getLibellePerimetre() == "Lui-même") {
$perimetreLibelle = 'Lui';
} else {
$perimetreLibelle = $perimetre->getLibellePerimetre();
}
$arrayPerimetre[$perimetreLibelle] = false;
}
$refDroit = $repositoryD->findAll();
foreach ($refDroit as $droit) {
$arrayDroit[$droit->getLibelleDroit()] = false;
}
foreach ($arrayPerimetre as $perimetre => $reponse) {
$idP = $repositoryP->findOneBy(["libellePerimetre" => ($perimetre == "Lui" ? "Lui-même" : $perimetre)]);
$isTrue = $repositoryPR->findOneBy(["idRole" => $role->getIdRole(), 'idPerimetre' => $idP->getIdPerimetre()]);
if (!is_null($isTrue)) {
$arrayPerimetre[$perimetre] = true;
}
}
foreach ($arrayDroit as $droit => $reponse) {
$idD = $repositoryD->findOneBy(["libelleDroit" => $droit]);
$isTrue = $repositoryRD->findOneBy(["idRole" => $role->getIdRole(), 'idDroit' => $idD->getIdDroit()]);
if (!is_null($isTrue)) {
$arrayDroit[$droit] = true;
}
}
$retour[] = ["idRole" => $role->getIdRole(), "libelleRole" => $role->getLibelleRole(), "perimetre" => $arrayPerimetre, "droit" => $arrayDroit];
}
$data = ['success' => true, 'data' => $retour];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
#[Route(path: '/api/get_federation_affectation_list', name: 'ctsweb_get_federation_affectation_list')]
public function getFederationAffectationList(Request $request)
{
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
try {
$em = $this->doctrine->getManager();
$federation = $this->getUser()->getIdFederation();
$data = ['federation' => $em->getRepository(RFederation::class)->getLibelleFederationList(isset($federation) ? $federation->getIdFederation() : null), 'affectation' => $em->getRepository(RefAffectation::class)->getAffectationEnabled()];
foreach ($em->getRepository(RefAction::class)->iterateAction() as $action) {
foreach ($em->getRepository(RefSousAction::class)->iterateSousAction($action['id']) as $sousAction) {
foreach ($em->getRepository(RefActivite::class)->iterateActivite($sousAction['id'], $data['federation']) as $activite) {
$activite['indicateurs'] = $em->getRepository(RefIndicateur::class)->getIndicateur($activite['id']);
if ($activite['idFederation'] != null) {
$activite['ref'] = 'FED';
} elseif ($activite['idAffectation'] == 1) {
$activite['ref'] = 'DS';
} else {
$activite['ref'] = 'DR';
}
$sousAction['activite'][] = $activite;
}
$action['sousAction'][] = $sousAction;
}
$data['listeActions'][] = $action;
}
$success = true;
} catch (\Exception $ex) {
$success = false;
$data = $ex->getMessage();
}
return $this->specializedJsonResponse->getJson($success, $data);
}
private function getInformationForActivityIndica($idAction)
{
$em = $this->doctrine->getManager();
$user = $this->getUser();
$userRole = $user->getUtilisateur()->getIdRole();
$listActionSousAction = [];
$listActionSousAction = match ($userRole) {
RefRole::ROLE_FEDE, RefRole::ROLE_FEDE_INVITE => $em->getRepository(RefIndicateur::class)->getActiviteIndicateurActionByFede($idAction, $user->getIdFederation()->getIdFederation()),
RefRole::ROLE_DS_ADMIN, RefRole::ROLE_DS_INVITE, RefRole::ROLE_DS_SIGNATAIRE => $em->getRepository(RefIndicateur::class)->getActiviteIndicateurActionByDs($idAction),
RefRole::ROLE_DR_SIGNATAIRE, RefRole::ROLE_DR => $em->getRepository(RefIndicateur::class)->getActiviteIndicateurActionByDr($idAction, $user->getIdAffectation()->getIdAffectation()),
default => $listActionSousAction,
};
return $listActionSousAction;
}
private function getFedeAndAffectation()
{
$em = $this->doctrine->getManager();
$user = $this->getUser();
$federation = $user->getIdFederation();
$idAffectation = $user->getIdAffectation();
$data = [];
$data = match ($user->getUtilisateur()->getIdRole()) {
RefRole::ROLE_FEDE, RefRole::ROLE_FEDE_INVITE, RefRole::ROLE_DS_ADMIN, RefRole::ROLE_DS_INVITE, RefRole::ROLE_DS_SIGNATAIRE, RefRole::ROLE_GCS => ['federation' => $em->getRepository(RFederation::class)->getLibelleFederationList(isset($federation) ? $federation->getIdFederation() : null), 'affectation' => $em->getRepository(RefAffectation::class)->getAffectationEnabled()],
RefRole::ROLE_DR, RefRole::ROLE_DR_SIGNATAIRE, RefRole::ROLE_GCR => ['federation' => $em->getRepository(RFederation::class)->getLibelleFederationList(isset($federation) ? $federation->getIdFederation() : null), 'affectation' => $em->getRepository(RefAffectation::class)->getAffectationEnabled($idAffectation->getIdAffectation())],
default => $data,
};
return $data;
}
#[Route(path: '/api/getIndicateurAdm', name: 'cts_web_indic')]
public function getListIndicateurAdmin(Request $request)
{
$post = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
try {
$idAction = $post['idAction'];
$data = $this->getFedeAndAffectation();
$listeFederation = [];
$dataListeFederation = $data['federation'];
foreach ($dataListeFederation as $fede) {
$listeFederation[] = ['idFederation' => $fede['idFederation'], 'libelleFederation' => $fede['libelleFederation']];
}
$listActionSousAction = $this->getInformationForActivityIndica($idAction);
$bilanAction = [];
$bilanActionSousAction = [];
$newlisteActions = [];
foreach ($listActionSousAction as $action) {
if (!in_array($action['id_action'], $bilanAction)) {
$newlisteActions[$action['id_action']] = ['id' => $action['id_action'], 'num' => $action['num_action'], 'libelle' => $action['libelle_action_long']];
$bilanAction[] = $action['id_action'];
$newlisteActions[$action['id_action']]['sousAction'][$action['id_sous_action']] = ['id' => $action['id_sous_action'], 'libelle' => $action['libelle_sous_action_long'], 'dateDesactivation' => $action['date_desactivation']];
$bilanActionSousAction[] = $action['id_sous_action'];
} else {
if (!in_array($action['id_sous_action'], $bilanActionSousAction)) {
$newlisteActions[$action['id_action']]['sousAction'][$action['id_sous_action']] = ['id' => $action['id_sous_action'], 'libelle' => $action['libelle_sous_action_long'], 'dateDesactivation' => $action['date_desactivation']];
$bilanActionSousAction[] = $action['id_sous_action'];
}
}
if ($action['id_federation'] != null) {
$createdBy = 'FED';
} elseif ($action['id_affectation'] == 1) {
$createdBy = 'DS';
} else {
$createdBy = 'DR';
}
$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];
}
foreach ($newlisteActions as $myAction) {
foreach ($myAction['sousAction'] as $litSousAction) {
foreach ($litSousAction['activite'] as $listeActivite) {
foreach ($listActionSousAction as $action) {
if ($listeActivite['id'] == $action['id_activite'] && $litSousAction['id'] == $action['id_sous_action'] && $action['indicateur_actif'] !== false) {
if ($action['indicateur_actif'] === null) {
$newlisteActions[$action['id_action']]['sousAction'][$action['id_sous_action']]['activite'][$action['id_activite']]['indicateurs'][] = null;
} else {
$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']];
}
}
}
}
}
}
$data['listeActions'] = $newlisteActions;
$success = 'true';
} catch (\Exception $ex) {
$success = false;
$data = $ex->getMessage();
}
return new JsonResponse(['success' => $success, 'data' => $data]);
}
#[Route(path: '/api/getListeAction', name: 'cts_web_activite')]
public function getListActivite(Request $request)
{
$post = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
try {
$data = [];
$idAction = $post['idAction'];
$listActionSousAction = $this->getInformationForActivityIndica($idAction);
$bilanAction = [];
$bilanActionSousAction = [];
$newlisteActions = [];
foreach ($listActionSousAction as $action) {
if (!in_array($action['id_action'], $bilanAction)) {
$newlisteActions[$action['id_action']] = ['id' => $action['id_action'], 'libelle' => $action['libelle_action_long']];
$bilanAction[] = $action['id_action'];
} else {
if (!in_array($action['id_sous_action'], $bilanActionSousAction)) {
$newlisteActions[$action['id_action']]['sousAction'][$action['id_sous_action']] = ['id' => $action['id_sous_action'], 'libelle' => $action['libelle_sous_action_long']];
$bilanActionSousAction[] = $action['id_sous_action'];
}
if ($action['id_federation'] != null) {
$createdBy = 'FED';
} elseif ($action['id_affectation'] == 1) {
$createdBy = 'DS';
} else {
$createdBy = 'DR';
}
$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];
}
}
foreach ($newlisteActions as $myAction) {
foreach ($myAction['sousAction'] as $litSousAction) {
foreach ($litSousAction['activite'] as $listeActivite) {
foreach ($listActionSousAction as $action) {
if ($listeActivite['id'] == $action['id_activite'] && $litSousAction['id'] == $action['id_sous_action'] && $action['indicateur_actif'] !== false) {
if ($action['indicateur_actif'] === null) {
$newlisteActions[$action['id_action']]['sousAction'][$action['id_sous_action']]['activite'][$action['id_activite']]['indicateurs'][] = null;
} else {
$newlisteActions[$action['id_action']]['sousAction'][$action['id_sous_action']]['activite'][$action['id_activite']]['indicateurs'][] = ['id' => $action['id_indicateur'], 'libelle' => $action['libelle_indicateur']];
}
}
}
}
}
}
$data['listeActions'] = $newlisteActions;
$success = 'true';
} catch (\Exception $ex) {
$success = false;
$data = $ex->getMessage();
}
return new JsonResponse(['success' => $success, 'data' => $data]);
}
#[Route(path: '/api/ajouter_activite', name: 'cts_web_mission_ajouter_activite')]
public function ajouterActivite(Request $request)
{
try {
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
$request->request->replace(is_array($data) ? $data : []);
$params = $request->request->all();
$em = $this->doctrine->getManager();
$activite = new \App\Entity\RefActivite();
switch ($this->getUser()->getUtilisateur()->getIdRole()) {
case 5:
case 8:
$activite->setIdFederation($this->getUser()->getIdFederation()->getIdFederation());
break;
case 1:
case 3:
case 10:
$activite->setIdAffectation(1);
break;
case 4:
case 11:
$activite->setIdAffectation($this->getUser()->getIdAffectation()->getIdAffectation());
break;
default:
return $this->specializedJsonResponse->getJson(false, "Vous n'avez pas les droits pour effectuer cette opération.");
}
$activite->setLibelleActivite($params['activite']);
$em->persist($activite);
$rarsa = new \App\Entity\RefActiviteRefSousAction();
$rarsa->setIdAction($em->getRepository(RefAction::class)->find($params['action']))
->setIdSousAction($em->getRepository(RefSousAction::class)->find($params['ssAction']))
->setIdActivite($activite)
->setActiviteActive(true)
->setActiviteDateDebut(new \DateTime());
$em->persist($rarsa);
$em->flush();
foreach ($params['indicateurs'] as $libelle) {
$indicateur = new \App\Entity\RefIndicateur();
$indicateur->setLibelleIndicateur($libelle);
$em->persist($indicateur);
$em->flush();
$rira = new \App\Entity\RefIndicateurRefActivite();
$rira->setIdActivite($activite->getIdActivite())
->setIdIndicateur($indicateur->getIdIndicateur())
->setIdSousAction($params['ssAction'])
->setIdAction($params['action'])
->setIndicateurActif(true)
->setIndicateurDateDebut(new \DateTime());
$em->persist($rira);
$em->flush();
}
$success = true;
} catch (\Exception $ex) {
$success = false;
$data = $ex->getMessage();
}
return $this->specializedJsonResponse->getJson($success, $data);
}
#[Route(path: '/api/supprimer_activites', name: 'ctsweb_supprimer_activites')]
public function supprimerActivites(Request $request)
{
try {
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
$request->request->replace(is_array($data) ? $data : []);
$params = $request->request->all();
$role = $this->getUser()->getUtilisateur()->getIdRole();
$federation = $this->getUser()->getIdFederation() != null ? $this->getUser()->getIdFederation()->getIdFederation() : "";
$affectation = $this->getUser()->getIdAffectation()->getIdAffectation();
$em = $this->doctrine->getManager();
if ($role != 5 && $role != 8 && $role != 1 && $role != 3 && $role != 10 && $role != 4 && $role != 11) {
$this->specializedJsonResponse->getJson(false, "Vous n'avez pas les droits pour effectuer cette opération.");
}
foreach ($em->getRepository(RefActiviteRefSousAction::class)->findBy(['idActivite' => $params['activites']]) as $rarsa) {
if ($rarsa->getActiviteActive()) {
$activite = $em->getRepository(RefActivite::class)->find($rarsa->getIdActivite());
switch ($role) {
case 5:
case 8:
$continue = $federation != $activite->getIdFederation();
break;
case 1:
case 3:
case 10:
$continue = false;
break;
case 4:
case 11:
$continue = $affectation != $activite->getIdAffectation();
break;
}
if ($continue) {
continue;
}
foreach ($em->getRepository(RefIndicateurRefActivite::class)->findBy(['idActivite' => $params['activites']]) as $rira) {
if ($rira->getIndicateurActif()) {
$rira->setIndicateurActif(false)
->setIndicateurDateFin(new \DateTime());
$em->persist($rira);
}
}
$rarsa->setActiviteActive(false)
->setActiviteDateFin(new \DateTime());
$em->persist($rarsa);
$em->flush();
}
}
$plmRepo = $em->getRepository(ProjetLettreMission::class);
$plmRepo->deleteActiviteToPlm($params['activites']);
$listePlm = $plmRepo->plmEnCoursModifSupHierachique($params['activites']);
$etapePrecedente = $this->etapePrecedentePlmSuperieurHierachique($listePlm, $params['activites']);
$success = $etapePrecedente;
} catch (\Exception $ex) {
$success = false;
$data = $ex->getMessage();
}
return $this->specializedJsonResponse->getJson($success, $data);
}
#[Route(path: '/api/modifier_activite', name: 'ctsweb_modifier_activite')]
public function modifierActivite(Request $request)
{
try {
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
$request->request->replace(is_array($data) ? $data : []);
$params = $request->request->all();
$em = $this->doctrine->getManager();
$rarsa = $em->getRepository(RefActiviteRefSousAction::class)->findOneBy(['idActivite' => $params['activite']]);
if (isset($rarsa) && $rarsa->getActiviteActive()) {
$activite = $em->getRepository(RefActivite::class)->find($rarsa->getIdActivite());
$newActivite = new \App\Entity\RefActivite();
switch ($this->getUser()->getUtilisateur()->getIdRole()) {
case 5:
case 8:
$federation = $this->getUser()->getIdFederation()->getIdFederation();
$arret = $federation != $activite->getIdFederation();
$newActivite->setIdFederation($federation);
break;
case 1:
case 3:
case 10:
$arret = false;
$newActivite->setIdAffectation($activite->getIdAffectation());
$newActivite->setIdFederation($activite->getIdFederation());
break;
case 4:
case 11:
$affectation = $this->getUser()->getIdAffectation()->getIdAffectation();
$arret = $affectation != $activite->getIdAffectation();
$newActivite->setIdAffectation($affectation);
break;
default:
$arret = true;
}
if ($arret) {
return $this->specializedJsonResponse->getJson(false, "Vous n'avez pas les droits pour effectuer cette opération.");
}
if (0 != strcmp((string) $activite->getLibelleActivite(), (string) $params['libelleActivite'])) {
$activite = $newActivite;
$rarsa->setActiviteActive(false)
->setActiviteDateFin(new \DateTime());
$em->persist($rarsa);
$activite->setLibelleActivite($params['libelleActivite']);
$em->persist($activite);
$newRarsa = new \App\Entity\RefActiviteRefSousAction();
$newRarsa->setIdAction($rarsa->getIdAction())
->setIdSousAction($rarsa->getIdSousAction())
->setIdActivite($activite)
->setActiviteActive(true)
->setActiviteDateDebut(new \DateTime());
$em->persist($newRarsa);
}
foreach ($em->getRepository(RefIndicateurRefActivite::class)->findBy(['idActivite' => $params['activite']]) as $rira) {
if ($rira->getIndicateurActif()) {
$rira->setIndicateurActif(false)
->setIndicateurDateFin(new \DateTime());
$em->persist($rira);
}
}
foreach ($params['indicateurs'] as $libelle) {
$indicateur = new \App\Entity\RefIndicateur();
$indicateur->setLibelleIndicateur($libelle);
$em->persist($indicateur);
$em->flush();
$rira = new \App\Entity\RefIndicateurRefActivite();
$rira->setIdActivite($activite->getIdActivite())
->setIdIndicateur($indicateur->getIdIndicateur())
->setIdSousAction($rarsa->getIdSousAction()->getIdSousAction())
->setIdAction($rarsa->getIdAction()->getIdAction())
->setIndicateurActif(true)
->setIndicateurDateDebut(new \DateTime());
$em->persist($rira);
}
$em->flush();
}
$success = true;
} catch (\Exception $ex) {
$success = false;
$data = $ex->getMessage();
}
return $this->specializedJsonResponse->getJson($success, $data);
}
#[Route(path: '/api/admin/listeLieu', name: 'admin_liste_lieu')]
public function listeLieu()
{
try {
$repositoryRl = $this->doctrine->getManager()->getRepository(RefLieu::class);
$result = $repositoryRl->findDonneesAdmin();
$data = ['success' => true, 'data' => $result];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
/**
* Modifie .
*/
#[Route(path: '/api/admin/modifierLieu', name: 'admin_modifier_lieu', methods: ['GET', 'POST'])]
public function modifierLieu(Request $request)
{
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
$em = $this->doctrine->getManager();
try {
$lieu = $em->getRepository(RefLieu::class)->findOneBy(['idLieu' => $data['lieu']['id']]);
$lieu->setLibelleLieu($data['lieu']['libelle']);
$em->persist($lieu);
$em->flush();
$data = ['success' => true, 'data' => "Lieu principal d'activité modifié"];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
#[Route(path: '/api/admin/newLieu', name: 'admin_ajouter_lieu')]
public function ajouterLieu(Request $request)
{
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
$em = $this->doctrine->getManager();
try {
$lieu = new RefLieu();
$lieu->setLibelleLieu($data['lieu']['libelle']);
$lieu->setDateActivation(new \DateTime());
$em->persist($lieu);
$em->flush();
$data = ['success' => true, 'data' => "Lieu principal d'activité créé"];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
#[Route(path: '/api/admin/supprimerLieu/{id}', name: 'admin_supprimer_lieu')]
public function supprimerLieu($id)
{
$em = $this->doctrine->getManager();
$lieu = $em->getRepository(RefLieu::class)->findOneBy(['idLieu' => $id]);
try {
$lieu->setDateDesactivation(new \DateTime());
$em->persist($lieu);
$em->flush();
$data = ['success' => true, 'data' => "Lieu principal d'activité supprimé"];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
#[Route(path: '/api/new_discipline', name: 'ctsweb_ajout_discipline')]
public function newDiscipline(Request $request)
{
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
$request->request->replace(is_array($data) ? $data : []);
$params = $request->request->all();
$em = $this->doctrine->getManager();
try {
$federation = $em->getRepository(RefFederation::class)->findOneBy(['idFederation' => $params['discipline']['id'], 'federationActive' => TRUE]);
$discipline = new RefDiscipline();
$discipline->setLibelleDiscipline(($params['discipline']['libelle']));
$discipline->setOlympique($params['discipline']['olympique']);
$discipline->setHautNiveau($params['discipline']['hautNiveau']);
$discipline->setAutre($params['discipline']['autre']);
$discipline->setFederation($federation);
$em->persist($discipline);
$em->flush();
$data = ['success' => true, 'data' => 'Discipline créée'];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
#[Route(path: '/api/get_liste_discipline', name: 'ctsweb_get_liste_discipline')]
public function listeDiscipline(Request $request)
{
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
$request->request->replace(is_array($data) ? $data : []);
$params = $request->request->all();
$em = $this->doctrine->getManager();
$listeDiscipline = [];
// check the select discipline list value
if ($params['id'] == 0) {
$disciplines = $em->getRepository(RefDiscipline::class)->findAll();
$listeDiscipline = $this->disciplineArray($disciplines, $listeDiscipline);
} else {
$federation = $em->getRepository(RefFederation::class)->findOneBy(['idFederation' => $params['id'], 'federationActive' => true]);
$disciplines = $federation->getDisciplines();
$listeDiscipline = $this->disciplineArray($disciplines, $listeDiscipline);
}
$data = ['success' => true, 'data' => $listeDiscipline];
return new JsonResponse($data);
}
public function disciplineArray($disciplines, array $listeDiscipline)
{
foreach ($disciplines as $descipline) {
$desactive = $descipline->getDateDesactivation() == NULL ? false : true;
if ($desactive == false) {
$listeDiscipline[] = ["id" => $descipline->getIdDiscipline(), "libelle" => $descipline->getLibelleDiscipline(), "olympique" => $descipline->getOlympique(), "hautNiveau" => $descipline->getHautNiveau(), "autre" => $descipline->getAutre()];
}
}
return $listeDiscipline;
}
#[Route(path: '/api/get_all_discipline', name: 'cts_web_discipline')]
public function exportAllListeDiscipline()
{
$em = $this->doctrine->getManager();
$displines = $em->getRepository(RefDiscipline::class)->findAll();
$response = $this->exportExcelDiscipline->generateExcel($displines);
$handle = fopen('php://memory', 'r+');
$date = new \DateTime();
$fileName = 'Export-Discipline';
rewind($handle);
$dispositionHeader = $response->headers->makeDisposition(
ResponseHeaderBag::DISPOSITION_ATTACHMENT,
$fileName . '.xls'
);
$response->headers->set('Content-Type', 'text/vnd.ms-excel; charset=utf-8');
$response->headers->set('Pragma', 'public');
$response->headers->set('Cache-Control', 'maxage=1');
$response->headers->set('Content-Disposition', $dispositionHeader);
return $response;
}
#[Route(path: '/api/suppresion_discipline', name: 'ctsweb_suppression_discipline')]
public function deleteDiscipline(Request $request)
{
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
$request->request->replace(is_array($data) ? $data : []);
$params = $request->request->all();
$em = $this->doctrine->getManager();
$discipline = $em->getRepository(RefDiscipline::class)->findOneBy(['idDiscipline' => $params['discipline']['id']]);
try {
$discipline->setDateDesactivation(new \DateTime());
$em->persist($discipline);
$em->flush();
$data = ['success' => true, 'data' => 'Discipline supprimée'];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
public function getDisciplineAction(Request $request)
{
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
$request->request->replace(is_array($data) ? $data : []);
$params = $request->request->all();
$em = $this->doctrine->getManager();
$discipline = $em->getRepository(RefDiscipline::class)->findOneBy(['idDiscipline' => $params['id']]);
try {
$datailDiscipline = ["id" => $discipline->getIdDiscipline(), "libelle" => $discipline->getLibelleDiscipline(), "olympique" => $discipline->getOlympique(), "hautNiveau" => $discipline->getHautNiveau(), "autre" => $discipline->getAutre()];
$data = ['success' => true, 'data' => $datailDiscipline];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
#[Route(path: '/api/edit_discipline', name: 'ctsweb_modification_discipline')]
public function editDiscipline(Request $request)
{
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
$request->request->replace(is_array($data) ? $data : []);
$params = $request->request->all();
$em = $this->doctrine->getManager();
$discipline = $em->getRepository(RefDiscipline::class)->findOneBy(['idDiscipline' => $params['discipline']['id']]);
$discipline->setOlympique($params['discipline']['olympique']);
$discipline->setHautNiveau($params['discipline']['hautNiveau']);
$discipline->setAutre($params['discipline']['autre']);
$discipline->setLibelleDiscipline($params['discipline']['libelle']);
try {
$em->persist($discipline);
$em->flush();
$data = ['success' => true, 'data' => 'Discipline modifiée'];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
private function uploadFile(Request $request, string $type)
{
$aide = new Aide();
$form = $this->createForm(\App\Form\AideType::class, $aide);
$form->handleRequest($request);
$nomFichierOriginal = $request->files->get('file')->getClientOriginalName();
$em = $this->doctrine->getManager();
$aideModif = $em->getRepository(Aide::class)->findOneBy(['type' => $type]);
if (isset($aideModif)) {
$em->remove($aideModif);
$em->flush();
}
if ($form->isSubmitted() && $form->isValid()) {
$aide->setType($type)
->setNom($nomFichierOriginal);
$dir = $this->getParameter('dir_file_aide');
$aide->setRootDir($dir);
$em->persist($aide);
$em->flush();
$env = ["idUpload" => $aide->getPath(), "msgUploadOK" => 'Le téléchargement de la pièce jointe a été effectué avec succès', "msgUploadERROR" => "", "urlFile" => $aide->getAssetPath()];
} else {
$env = ["idUpload" => '', "msgUploadOK" => '', "msgUpload" => (string) $form->getErrors(true, false), "urlFile" => ''];
}
return new JsonResponse($env);
}
#[Route(path: '/api/aideOdm', name: 'admin_upload_aide_odm')]
public function uploadFileAideOdm(Request $request)
{
return $this->uploadFile($request, 'odm');
}
#[Route(path: '/api/aideSer', name: 'admin_upload_aide_ser')]
public function uploadFileAideSer(Request $request)
{
return $this->uploadFile($request, 'ser');
}
#[Route(path: '/api/aideFormation', name: 'admin_upload_aide_formation')]
public function uploadFileAideFormation(Request $request)
{
return $this->uploadFile($request, 'form');
}
#[Route(path: '/api/aideCar', name: 'admin_upload_aide_car')]
public function uploadFileAideCar(Request $request)
{
return $this->uploadFile($request, 'car');
}
#[Route(path: '/api/aideSit', name: 'admin_upload_aide_sit')]
public function uploadFileAideSit(Request $request)
{
return $this->uploadFile($request, 'sit');
}
#[Route(path: '/api/aideAct', name: 'admin_upload_aide_act')]
public function uploadFileAideAct(Request $request)
{
return $this->uploadFile($request, 'act');
}
#[Route(path: '/api/aideLm', name: 'admin_upload_aide_lm')]
public function uploadFileAideLm(Request $request)
{
return $this->uploadFile($request, 'lm');
}
#[Route(path: '/api/aideAgenda', name: 'admin_upload_aide_agenda')]
public function uploadFileAideAgenda(Request $request)
{
return $this->uploadFile($request, 'agenda');
}
#[Route(path: '/api/aideRapport', name: 'admin_upload_aide_rapport')]
public function uploadFileAideRapport(Request $request)
{
return $this->uploadFile($request, 'rapport');
}
#[Route(path: '/api/aideCts', name: 'admin_upload_aide_cts')]
public function uploadFileAideCts(Request $request)
{
return $this->uploadFile($request, 'cts');
}
#[Route(path: '/api/aideDr', name: 'admin_upload_aide_dr')]
public function uploadFileAideDr(Request $request)
{
return $this->uploadFile($request, 'dr');
}
#[Route(path: '/api/aideDtn', name: 'admin_upload_aide_dtn')]
public function uploadFileAideDtn(Request $request)
{
return $this->uploadFile($request, 'dtn');
}
#[Route(path: '/api/aideRestitution', name: 'admin_upload_aide_restitution')]
public function uploadFileAideRestitution(Request $request)
{
return $this->uploadFile($request, 'restit');
}
#[Route(path: '/api/aideConge', name: 'admin_upload_aide_conge')]
public function uploadFileAideConge(Request $request)
{
return $this->uploadFile($request, 'conge');
}
#[Route(path: '/api/aideLogin', name: 'admin_upload_aide_login')]
public function uploadFileAideLogin(Request $request)
{
return $this->uploadFile($request, 'login');
}
#[Route(path: '/api/delete_aide', name: 'admin_delete_aide')]
public function deleteAide(Request $request)
{
try {
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
$request->request->replace(is_array($data) ? $data : []);
$params = $request->request->all();
$type = $params['type'];
$em = $this->doctrine->getManager();
$aide = $em->getRepository(Aide::class)->findOneBy(['type' => $type]);
if ($aide) {
$em->remove($aide);
$em->flush();
}
$data = ['success' => true, 'data' => $aide->getId() . 'a été supprimé'];
return new JsonResponse($data);
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
return new JsonResponse($data);
}
}
#[Route(path: '/api/get_aide', name: 'admin_get_aide')]
public function getAide(Request $request)
{
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
$request->request->replace(is_array($data) ? $data : []);
$params = $request->request->all();
$em = $this->doctrine->getManager();
$aide = $em->getRepository(Aide::class)->findOneBy(['type' => $params['type']]);
try {
if (isset($aide)) {
$dataAide = ["id" => $aide->getId(), "nom" => $aide->getNom(), "type" => $aide->getType(), "path" => $this->getParameter('dir_file_aide') . $aide->getPath()];
$data = ['success' => true, 'data' => $dataAide];
} else {
$data = ['success' => false, 'data' => ''];
}
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
#[Route(path: '/api/get_all_aide', name: 'admin_get_all_aide')]
public function getAllAide()
{
$dataAide = [];
$em = $this->doctrine->getManager();
$aides = $em->getRepository(Aide::class)->findAll();
try {
if (isset($aides)) {
foreach ($aides as $aide) {
$dataAide[] = ["id" => $aide->getId(), "nom" => $aide->getNom(), "type" => $aide->getType(), "path" => $this->getParameter('dir_file_aide') . $aide->getPath()];
}
$data = ['success' => true, 'data' => $dataAide];
} else {
$data = ['success' => false, 'data' => ''];
}
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
private function etapePrecedentePlmSuperieurHierachique($listePlm, $listeActivite = [], $listeActiviteAutre = [])
{
try {
$em = $this->doctrine->getManager();
foreach ($listePlm as $id) {
$projetLettreMission = $em->getRepository(ProjetLettreMission::class)->find($id['id_projet_lm']);
$idPlm = $this->persistAndCloneSupHierachique($projetLettreMission, $listeActivite, $listeActiviteAutre);
$newProjetLettreMission = $em->getRepository(ProjetLettreMission::class)->find($idPlm);
$newProjetLettreMission->setIdParentProjetLm($id['id_projet_lm']);
$em->persist($newProjetLettreMission);
}
$em->flush();
} catch (\Exception) {
return false;
}
return true;
}
private function persistAndCloneSupHierachique($projetLettreMission, $listeActivite = [], $listeActiviteAutre = [])
{
$newPlm = $this->cloneLastPlm->clonePlmEtapePrecedenteSupHiera($projetLettreMission);
if (sizeof($listeActivite) > 0) {
$this->insertDataForLastMission($projetLettreMission, $newPlm, $listeActivite);
}
if (sizeof($listeActiviteAutre) > 0) {
$this->insertDataForLastAutreMission($projetLettreMission, $newPlm, $listeActiviteAutre);
}
$idPlm = $newPlm->getIdProjetLm();
return $idPlm;
}
private function insertDataForLastMission($lastPlm, $newProjetLettreMission, $listeActivite = [])
{
$em = $this->doctrine->getManager();
$insert = false;
$repoRefActiviteRefSousAction = $em->getRepository(RefActiviteRefSousAction::class);
foreach ($lastPlm->getMission() as $mission) {
if ($mission instanceof Mission) {
if (!in_array($mission->getIdActivite()->getIdActivite(), $listeActivite)) {
$activite = $repoRefActiviteRefSousAction->findOneBy(['idActivite' => $mission->getIdActivite()->getIdActivite()]);
if ($activite) {
$sousActionRefAction = $em->getRepository(RefSousActionRefAction::class)->findOneBy(['idSousAction' => $activite->getIdSousAction()->getIdSousAction()]);
if ($sousActionRefAction) {
if ($activite->getActiviteActive() == true && $sousActionRefAction->getSousActionActive() == true) {
$newActivite = $mission->getIdActivite();
$newMission = new Mission();
$newMission->setIdProjetLm($newProjetLettreMission);
$newMission->setIdActivite($newActivite);
$newMission->setQuotiteRegionale($mission->getQuotiteRegionale());
$newMission->setQuotiteNationale($mission->getQuotiteNationale());
$em->persist($newMission);
$insert = true;
}
}
}
}
}
}
foreach ($lastPlm->getPlmActInd() as $plmActInd) {
if ($plmActInd instanceof PlmActiviteIndic) {
if (!in_array($plmActInd->getIdActivite()->getIdActivite(), $listeActivite)) {
$activite = $repoRefActiviteRefSousAction->findOneBy(['idActivite' => $plmActInd->getIdActivite()->getIdActivite()]);
//$activite = $repoRefActiviteRefSousAction->getActiviteActive($plmActInd->getIdActivite()->getIdActivite());
if ($activite) {
$sousActionRefAction = $em->getRepository(RefSousActionRefAction::class)->findOneBy(['idSousAction' => $activite->getIdSousAction()->getIdSousAction()]);
if ($sousActionRefAction) {
if ($activite->getActiviteActive() == true && $sousActionRefAction->getSousActionActive() == true) {
$newActIndi = new PlmActiviteIndic();
$newActIndi->setIdActivite($plmActInd->getIdActivite());
$newActIndi->setIdIndicateur($plmActInd->getIdIndicateur());
$newActIndi->setIdProjetLm($newProjetLettreMission);
$em->persist($newActIndi);
$insert = true;
}
}
}
}
}
}
foreach ($lastPlm->getPlmIndAutre() as $plmIndAutre) {
if ($plmIndAutre instanceof PlmIndicateurAutre) {
if (!in_array($plmIndAutre->getIdActivite()->getIdActivite(), $listeActivite)) {
$activite = $repoRefActiviteRefSousAction->findOneBy(['idActivite' => $plmIndAutre->getIdActivite()->getIdActivite()]);
//$activite = $repoRefActiviteRefSousAction->getActiviteActive($plmIndAutre->getIdActivite()->getIdActivite());
if ($activite) {
$sousActionRefAction = $em->getRepository(RefSousActionRefAction::class)->findOneBy(['idSousAction' => $activite->getIdSousAction()->getIdSousAction()]);
if ($sousActionRefAction) {
if ($activite->getActiviteActive() == true && $sousActionRefAction->getSousActionActive() == true) {
$newPlmIndiAutre = new PlmIndicateurAutre();
$newPlmIndiAutre->setIdProjetLm($newProjetLettreMission);
$newPlmIndiAutre->setIdActivite($plmIndAutre->getIdActivite());
$em->persist($newPlmIndiAutre);
// $em->flush();
$insert = true;
foreach ($plmIndAutre->getPlmActivteIndicAutre() as $plmActivteIndicAutre) {
if ($plmActivteIndicAutre instanceof PlmActiviteIndicAutre) {
$newPlmActiviteIndicAutre = new PlmActiviteIndicAutre();
$newPlmActiviteIndicAutre->setIdPlmIndAutre($newPlmIndiAutre);
$newPlmActiviteIndicAutre->setLibelleIndicateurAutre($plmActivteIndicAutre->getLibelleIndicateurAutre());
$newPlmActiviteIndicAutre->setIdActiviteIndicAutreParent($plmActivteIndicAutre->getIdActiviteIndicAutreParent());
$em->persist($newPlmActiviteIndicAutre);
$insert = true;
}
}
}
}
}
}
}
}
$em->flush();
return $insert;
}
private function insertDataForLastAutreMission($lastPlm, $newProjetLettreMission, $listeActiviteAutre)
{
$em = $this->doctrine->getManager();
$insert = false;
foreach ($lastPlm->getPlmActiviteAutre() as $plmActiviteAutre) {
if ($plmActiviteAutre instanceof PlmActiviteAutre) {
if (!in_array($plmActiviteAutre->getIdActAutre(), $listeActiviteAutre)) {
if ($plmActiviteAutre->getIdSousAction()->getDateDesactivation() == null) {
$newPlmActiviteAutre = new PlmActiviteAutre();
$newPlmActiviteAutre->setIdProjetLm($newProjetLettreMission);
$newPlmActiviteAutre->setIdAction($plmActiviteAutre->getIdAction());
$newPlmActiviteAutre->setIdSousAction($plmActiviteAutre->getIdSousAction());
$newPlmActiviteAutre->setLibelleActAutre($plmActiviteAutre->getLibelleActAutre());
$newPlmActiviteAutre->setQuotiteRegAutre($plmActiviteAutre->getQuotiteRegAutre());
$newPlmActiviteAutre->setQuotiteNatAutre($plmActiviteAutre->getQuotiteNatAutre());
$em->persist($newPlmActiviteAutre);
$insert = true;
foreach ($plmActiviteAutre->getPlmActivteAutreIndicAutre() as $plmActivteAutreIndicAutre) {
if ($plmActivteAutreIndicAutre instanceof PlmActiviteAutreIndicAutre)
$newPlmActivteAutreIndicAutre = new PlmActiviteAutreIndicAutre();
$newPlmActivteAutreIndicAutre->setIdActAutre($newPlmActiviteAutre);
$newPlmActivteAutreIndicAutre->setIdPlmActAutIndAutParent($plmActivteAutreIndicAutre->setIdPlmActAutIndAutParent());
$newPlmActivteAutreIndicAutre->setLibelleIndAutreActAutre($plmActivteAutreIndicAutre->getLibelleIndAutreActAutre());
$em->persist($newPlmActivteAutreIndicAutre);
$insert = true;
}
}
}
}
}
$em->flush();
return $insert;
}
#[Route(path: '/api/liste_qualification_utilisateur_admin', name: 'admin_liste_utilisateur_qualification')]
public function getListeQualificationUtilisateur()
{
$em = $this->doctrine->getManager();
$response = [];
try {
$rolesCTS = [];
$roleNonCTS = [];
$roles = $em->getRepository(RefRole::class)->findAll();
//Liste des rôles
foreach ($roles as $role) {
$item = ["id" => $role->getIdRole(), "libelle" => $role->getLibelleRole()];
if ($role->getRefRh()) {
$rolesCTS[] = $item;
} else {
$roleNonCTS[] = $item;
}
}
//Liste FOP
$fop = $em->getRepository(RefFop::class)->findDonneesAdmin();
//Liste ODM Cadre Général
$odmCadreGeneral = $em->getRepository(RefOdmCadreGeneral::class)->findListOdmCadreGeneral();
$response = ['CTS' => $rolesCTS, 'nonCTS' => $roleNonCTS, 'fop' => $fop, 'odmCadreGeneral' => $odmCadreGeneral];
$data = ['success' => true, 'data' => $response];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
#[Route(path: '/api/getExcelIndicateur', name: 'cts_web_excelIndi')]
public function generateFileExcelForIndicateur()
{
$data = $this->getDataForExcelByProfil();
$response = $this->generateFileExcelIndicActivite->generateExcel($data);
$handle = fopen('php://memory', 'r+');
$date = new \DateTime();
$format = $date->format('m-d-y');
$fileName = "Referentiel-Action-Sous-action-Activite-Indicateur-au$format";
rewind($handle);
$dispositionHeader = $response->headers->makeDisposition(
ResponseHeaderBag::DISPOSITION_ATTACHMENT,
"CTS restitution le $fileName.xls"
);
$response->headers->set('Content-Type', 'text/vnd.ms-excel; charset=utf-8');
$response->headers->set('Pragma', 'public');
$response->headers->set('Cache-Control', 'maxage=1');
$response->headers->set('Content-Disposition', $dispositionHeader);
return $response;
}
#[Route(path: '/api/getExcelIndicateurDesactivate', name: 'cts_web_excelIndicDesac')]
public function generateFileExcelIndicateurDesactivate()
{
$data = $this->getDataForExcelDesactivateByProfil();
$response = $this->generateFileExcelIndicActivite->generateExcel($data);
$handle = fopen('php://memory', 'r+');
$date = new \DateTime();
$format = $date->format('m-d-y');
$fileName = 'Referentiel-Desactive-Action-Sous-action-Activite-Indicateur-au ' . $format;
rewind($handle);
$dispositionHeader = $response->headers->makeDisposition(
ResponseHeaderBag::DISPOSITION_ATTACHMENT,
'CTS restitution le ' . $fileName . '.xls'
);
$response->headers->set('Content-Type', 'text/vnd.ms-excel; charset=utf-8');
$response->headers->set('Pragma', 'public');
$response->headers->set('Cache-Control', 'maxage=1');
$response->headers->set('Content-Disposition', $dispositionHeader);
return $response;
}
private function getDataForExcelByProfil()
{
$em = $this->doctrine->getManager();
$user = $this->getUser();
$userRole = $this->getUser()->getUtilisateur()->getIdRole();
$dataActiviteIndic = [];
switch ($userRole) {
case 5:
case 8:
$listAffectationCts = $em->getRepository(RefAffectation::class)->getAffectationByCts($user->getIdFederation()->getIdFederation());
$tabs = [];
foreach ($listAffectationCts as $listAff) {
$tabs[] = $listAff['id_affectation'];
}
if (count($tabs) > 1) {
$InArrayAffectation = implode(",", $tabs);
} else {
$InArrayAffectation = $tabs;
}
$dataActiviteIndic = $em->getRepository(RefIndicateur::class)->getActiviteIndicateurActionByFedeForExcel($user->getIdFederation()->getIdFederation(), $InArrayAffectation);
break;
case 1:
case 3:
case 10:
$dataActiviteIndic = $em->getRepository(RefIndicateur::class)->getActiviteIndicateurActionByDsForExcel();
break;
case 11:
case 4:
$listAffectationCts = $em->getRepository(UtilisateurInformation::class)->getFederationByDr($user->getIdAffectation()->getIdAffectation());
$tabs = [];
foreach ($listAffectationCts as $listAff) {
$tabs[] = $listAff['id_federation'];
}
if (count($tabs) > 1) {
$InArrayAffectation = implode(",", $tabs);
} else {
$InArrayAffectation = $tabs;
}
$dataActiviteIndic = $em->getRepository(RefIndicateur::class)->getActiviteIndicateurActionByDrForExcel($user->getIdAffectation()->getIdAffectation(), $InArrayAffectation);
break;
}
return $dataActiviteIndic;
}
private function getDataForExcelDesactivateByProfil()
{
$em = $this->doctrine->getManager();
$user = $this->getUser();
$userRole = $this->getUser()->getUtilisateur()->getIdRole();
$dataActiviteIndic = [];
switch ($userRole) {
case 5:
case 8:
$listAffectationCts = $em->getRepository(RefAffectation::class)->getAffectationByCts($user->getIdFederation()->getIdFederation());
$tabs = [];
foreach ($listAffectationCts as $listAff) {
$tabs[] = $listAff['id_affectation'];
}
if (count($tabs) > 1) {
$InArrayAffectation = implode(",", $tabs);
} else {
$InArrayAffectation = $tabs;
}
$dataActiviteIndic = $em->getRepository(RefIndicateur::class)->getActiviteIndicateurActionByFedeForExcelDesactivate($user->getIdFederation()->getIdFederation(), $InArrayAffectation);
break;
case 1:
case 3:
case 10:
$dataActiviteIndic = $em->getRepository(RefIndicateur::class)->getActiviteIndicateurActionByDsForExcelDesactivate();
break;
case 11:
case 4:
$listAffectationCts = $em->getRepository(UtilisateurInformation::class)->getFederationByDr($user->getIdAffectation()->getIdAffectation());
$tabs = [];
foreach ($listAffectationCts as $listAff) {
$tabs[] = $listAff['id_federation'];
}
if (count($tabs) > 1) {
$InArrayAffectation = implode(",", $tabs);
} else {
$InArrayAffectation = $tabs;
}
$dataActiviteIndic = $em->getRepository(RefIndicateur::class)->getActiviteIndicateurActionByDrForExcelDesactivate($user->getIdAffectation()->getIdAffectation(), $InArrayAffectation);
break;
}
return $dataActiviteIndic;
}
#[Route(path: '/api/uploadImage/{type}', name: 'cts_web_upload_image')]
public function uploadImage(Request $request, $type = null)
{
$message = '';
$fileName = '';
$maxSize = 1_048_576; // 1MB
$specific_path = $this->getImageSpecificPath($type);
$dir = $this->getParameter('dir_file_image') . $specific_path;
try {
$file = $request->files->get('upload');
if ($this->uploadIsAllowed($file)) {
if ($file->getSize() <= $maxSize) {
$fileName = $file->getClientOriginalName();
//Check if the directory already exists.
if (!is_dir($dir)) {
//Directory does not exist, so lets create it.
mkdir($dir, 0755, true);
}
$file->move($dir, $fileName);
} else {
$message = 'Fichier trop volumineux (1MB max.)';
}
} else {
$message = 'Format de fichier incorrect';
}
if (empty($message)) {
$array = ['url' => $dir . $fileName, 'fileName' => $fileName, 'uploaded' => 1];
} else {
$array = ['status' => 0, 'error' => ['message' => $message]];
}
$response = new JsonResponse($array, \Symfony\Component\HttpFoundation\Response::HTTP_OK);
return $response;
} catch (\Exception) {
$array = ['status' => 0, 'error' => ['message' => 'Une erreur se produit lors de l\'envoie du fichier']];
$response = new JsonResponse($array, \Symfony\Component\HttpFoundation\Response::HTTP_BAD_REQUEST);
return $response;
}
}
#[Route(path: '/api/browseImage/{type}', name: 'cts_web_browse_image')]
public function browseImage($type = null): \Symfony\Component\HttpFoundation\Response
{
$specific_path = $this->getImageSpecificPath($type);
$uri_file_path = $this->getParameter('dir_file_image') . $specific_path;
$files = glob($uri_file_path . "*");
$CKEditorFuncNum = intval($_GET['CKEditorFuncNum']);
$parse_files_name = function ($path) use ($specific_path) {
$uri_file_path = $this->getParameter('dir_file_image') . $specific_path;
return str_replace($uri_file_path, '', $path);
};
$files_name = array_map($parse_files_name, $files);
$available_files = array_combine($files_name, $files);
return $this->render(
'Image/image_browser.html.twig',
['CKEditorFuncNum' => $CKEditorFuncNum, 'available_files' => $available_files]
);
}
/**
* Check file uploaded extension
* @param $file
* @return bool
*/
private function uploadIsAllowed($file)
{
$extension_allowed = ['jpg', 'jpeg', 'gif', 'png', 'bmp', 'tiff'];
$ext = !is_null($file) ? $file->guessExtension() : '';
return isset($file) && in_array($ext, $extension_allowed);
}
private function getImageSpecificPath($type)
{
if ((is_null($type) || $type == 'default')) {
return '';
} else {
$user = $this->getUser();
$specific_path = $type . DIRECTORY_SEPARATOR;
$specific_path .= (($type == 'user') ? $user->getIdUtilisateur() . DIRECTORY_SEPARATOR : '');
return $specific_path;
}
}
/**
* XLS Export all entities .
*/
#[Route(path: '/api/export_excel_federation', name: 'ctsweb_export_excel_federation')]
public function exportExcelFederation()
{
error_reporting(E_ERROR | E_PARSE);
$listFederations = [];
$em = $this->doctrine->getManager();
$refFederations = $em->getRepository(RefFederation::class)->findListFederation();
try {
foreach ($refFederations as $refFederation) {
$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' => ''];
}
$data = ['success' => true, 'data' => $listFederations];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
$fileName = "synthese_federations_" . (new \DateTime())->format("Y-m-d_H_i_s");
$response = $this->exportExcelFederation->generateExcel(
$data
);
$handle = fopen('php://memory', 'r+');
rewind($handle);
$dispositionHeader = $response->headers->makeDisposition(
ResponseHeaderBag::DISPOSITION_ATTACHMENT,
"$fileName.xls"
);
$response->headers->set('Content-Type', 'text/vnd.ms-excel; charset=utf-8');
$response->headers->set('Pragma', 'public');
$response->headers->set('Cache-Control', 'maxage=1');
$response->headers->set('Content-Disposition', $dispositionHeader);
return $response;
}
}