<?php
namespace App\Controller\bilanControllers;
use App\Entity\bilan\Criticite;
use App\Entity\bilan\Frequence;
use App\Entity\bilan\Gravite;
use App\Entity\bilan\Job;
use App\Entity\bilan\Mission;
use App\Entity\bilan\MOG;
use App\Entity\bilan\MOP;
use App\Entity\bilan\Risque;
use App\Entity\bilan\Situation;
use App\Entity\bilan\SituationRisque;
use App\Entity\bilan\Task;
use App\Entity\Group;
use App\Entity\Configuration\CompanyEntity;
use App\Repository\bilan\JobRepository;
use App\Repository\bilan\TaskRepository;
use App\Service\SelectedEntityService;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Security;
use App\Entity\User;
/**
* @Route("/eval/job")
*/
class JobEvalKanbanController extends AbstractController
{
private $jobRepository;
private $security;
private $requestStack;
private $selectedEntityService;
public function __construct(JobRepository $jobRepository, Security $security, RequestStack $requestStack, SelectedEntityService $selectedEntityService)
{
$this->jobRepository = $jobRepository;
$this->security = $security;
$this->requestStack = $requestStack;
$this->selectedEntityService = $selectedEntityService;
}
/**
* @Route("/list", name="evalJob_list", methods={"GET","POST"})
*/
public function list(Request $request, TaskRepository $taskRepository):Response
{
if (!$request->isXmlHttpRequest()) {
return new JsonResponse(array('status' => 'error','message' => 'Access forbidden!'), 400);
}
if ($request->request->has('missionId')) {
$entityManager = $this->getDoctrine()->getManager();
$missionId = $request->request->get('missionId');
$mission = $entityManager->getRepository(Mission::class)->findOneBy(['id'=>$missionId]);
if (!$mission) {
return new JsonResponse(array('status' => 'error', 'message' => 'Mission not found'), 404);
}
$taskRepositoryData = $taskRepository->transformAllMision($mission);
return new JsonResponse($taskRepositoryData);
}
return new JsonResponse(array('status' => 'error', 'message' => 'Missing missionId parameter'), 400);
}
/**
* @Route("/new", name="save_TS",methods={"POST"})
*/
public function new(Request $request): Response
{
if (!$request->isXmlHttpRequest()) {
return new JsonResponse(array('status' => 'error','message' => 'Access forbidden!'), 400);
}
if (isset($request->request)) {
$user = $this->getUser();
$entityManager = $this->getDoctrine()->getManager();
if (!$entityManager->isOpen()) {
$entityManager->create(
$entityManager->getConnection(),
$entityManager->getConfiguration()
);
}
$task_id='';
$situation_id='';
$entityId = $request->request->get('entity_id');
$situationTitle = $request->request->get('situation');
$risques= $request->request->get('risques');
$type_save= $request->request->get('type_save');
//
if ($type_save=='saveTS') {
$missionId = $request->request->get('missionId');
$taskTitle = $request->request->get('task');
$mission = $entityManager->getRepository(Mission::class)->findOneBy(['id'=>$missionId]);
$task = new Task();
$task->setMission($mission);
$task->setTitle($taskTitle);
$task->setCreatedBy($user->getId());
$task->setCreatedAt(new \DateTime('now'));
$entityManager->persist($task);
try {
$entityManager->flush();
$task_id=$task->getId();
$dataT['task'] = [
'idTask'=>$task->getId(),
'titleTask'=>$task->getTitle(),
/* 'date'=>$mission->getCreatedAt()->format('d/m/Y'),
'job'=>$job_title,
'mission'=>$mission_title,
'processus'=>$processus_ref,
'responsible'=>$responsible->getFullName()*/
];
$data[] =$dataT;
} catch (\Exception $e) {
$data = array('status' => 'error', 'message' => $e->getMessage());
}
} else {
$task_id = $request->request->get('idTask');
$task = $entityManager->getRepository(Task::class)->findOneBy(['id'=>$task_id]);
$dataT['task'] = [
'idTask'=>$task->getId(),
'titleTask'=>$task->getTitle(),
];
$data[] =$dataT;
}
// dd( $mission);
$situation = new Situation();
$situation->setTask($task);
$situation->setTitle($situationTitle);
$situation->setCreatedBy($user->getId());
$situation->setCreatedAt(new \DateTime('now'));
$entityManager->persist($situation);
try {
$entityManager->flush();
$dataS['situation'] = [
'idSituation'=>$situation->getId(),
'titleSituation'=>$situation->getTitle(),
/* 'date'=>$mission->getCreatedAt()->format('d/m/Y'),
'job'=>$job_title,
'mission'=>$mission_title,
'processus'=>$processus_ref,
'responsible'=>$responsible->getFullName()*/
];
$data[] =$dataS;
foreach ($risques as $id) {
$risque = $entityManager->getRepository(Risque::class)->findOneBy(['id'=>$id]);
$situation_risque = new SituationRisque();
$situation_risque->setSituation($situation);
$situation_risque->setRisque($risque);
$companyEntity = null;
if ($entityId) {
$companyEntity = $entityManager
->getRepository(CompanyEntity::class)
->find($entityId);
} else {
$companyEntity = $this->selectedEntityService->getSelectedEntity();
}
$situation_risque->setCompanyEntity($companyEntity);
$entityManager->persist($situation_risque);
$entityManager->flush();
$dataSR['situation_R'][] = [
'idSR'=>$situation_risque->getId(),
'titlerisque'=>$risque->getNom(),
'idRisque'=>$risque->getId(),
'idSituation'=>$situation->getId(),
/* 'date'=>$mission->getCreatedAt()->format('d/m/Y'),
'job'=>$job_title,
'mission'=>$mission_title,
'processus'=>$processus_ref,
'responsible'=>$responsible->getFullName()*/
];
}
$data[] =$dataSR;
} catch (\Exception $e) {
$data = array('status' => 'error', 'message' => $e->getMessage());
}
}
$response =$data;
return new JsonResponse($response, 200);
}
/**
* @Route("/situation/{id}/edit", name="edit_situation", methods={"GET","POST"})
*/
public function editSituation(Request $request, Situation $situation): Response
{
if (!$request->isXmlHttpRequest()) {
return new JsonResponse(array('status' => 'error','message' => 'Access forbidden!'), 400);
}
if (isset($request->request)) {
$entityId = $request->request->get('entity_id');
$situationTitle = $request->request->get('situation');
$risques= $request->request->get('risques');
$risques_selected= $request->request->get('risques_selected');
// Récupération de l'utilisateur connecté
$user = $this->getUser();
$risques_add = array_diff($risques, $risques_selected);
$risques_deleted = array_diff($risques_selected, $risques);
$entityManager = $this->getDoctrine()->getManager();
$situation->setTitle($situationTitle);
try {
$entityManager->flush();
$dataS['situation'] = [
'idSituation'=>$situation->getId(),
'titleSituation'=>$situation->getTitle(),
];
$data[] =$dataS;
$situations_risques = $entityManager->getRepository(SituationRisque::class)->findBy(['situation'=>$situation->getId()]);
foreach ($situations_risques as $situation_risque) {
if (in_array($situation_risque->getRisque()->getId(), $risques_deleted)) {
$entityManager->remove($situation_risque);
$entityManager->flush();
}
}
foreach ($risques_add as $id) {
$risque = $entityManager->getRepository(Risque::class)->findOneBy(['id'=>$id]);
$situation_risque = new SituationRisque();
$situation_risque->setSituation($situation);
$situation_risque->setRisque($risque);
$entityManager->persist($situation_risque);
$entityManager->flush();
}
// Déterminer l'entité à filtrer pour la réponse
$selectedEntity = $this->selectedEntityService->getSelectedEntity();
$situations_risques = $entityManager->getRepository(SituationRisque::class)->findBy(['situation'=>$situation->getId()]);
$dataSR['situation_R'] = []; // Initialisation du tableau
foreach ($situations_risques as $situation_risque) {
// Filtrer par entité sélectionnée ou montrer tout si aucune entité sélectionnée
if (
!$selectedEntity ||
!$situation_risque->getCompanyEntity() ||
$situation_risque->getCompanyEntity()->getId() === $selectedEntity->getId()
) {
$dataSR['situation_R'][] = [
'idSR'=>$situation_risque->getId(),
'titlerisque'=>$situation_risque->getRisque()->getNom(),
'idRisque'=>$situation_risque->getRisque()->getId(),
'idSituation'=>$situation->getId(),
];
}
}
$data[] =$dataSR;
} catch (\Exception $e) {
$data = array('status' => 'error', 'message' => $e->getMessage());
}
}
$response =$data;
return new JsonResponse($response, 200);
}
/**
* @Route("/task/{id}/edit", name="editJob_task", methods={"GET","POST"})
*/
public function editTask(Request $request, Task $task): Response
{
if (!$request->isXmlHttpRequest()) {
return new JsonResponse(array('status' => 'error','message' => 'Access forbidden!'), 400);
}
if (isset($request->request)) {
$taskTitle = $request->request->get('valeur');
$entityManager = $this->getDoctrine()->getManager();
$task->setTitle($taskTitle);
try {
$entityManager->flush();
$data=['update'=>1,'title'=>$taskTitle];
} catch (\Exception $e) {
$data = array('status' => 'error', 'message' => $e->getMessage());
}
}
$response =$data;
return new JsonResponse($response, 200);
}
/**
* @Route("/situation/{id}/get", name="situation_get", methods={"GET","POST"})
*/
public function getSituation(Request $request, Situation $situation): Response
{
if (isset($request->request)) {
$entityManager = $this->getDoctrine()->getManager();
$risque =$entityManager->getRepository(Risque::class)->findAll();
// Déterminer l'entité à filtrer
$selectedEntity = $this->selectedEntityService->getSelectedEntity();
$situations_risques = $situation->getSituationRisques();
$data = [];
foreach ($situations_risques as $situation_risque) {
// Filtrer par entité sélectionnée ou montrer tout si aucune entité sélectionnée
if (
!$selectedEntity ||
!$situation_risque->getCompanyEntity() ||
$situation_risque->getCompanyEntity()->getId() === $selectedEntity->getId()
) {
$data[] = [
'idSR'=>$situation_risque->getId(),
'titlerisque'=>$situation_risque->getRisque()->getNom(),
'idRisque'=>$situation_risque->getRisque()->getId(),
'idSituation'=>$situation->getId(),
];
}
}
$response =$data;
return new JsonResponse($response, 200);
}
}
/**
* @Route("/task/{id}/delete", name="task_delete", methods={"GET","POST"})
*/
public function deleteT(Request $request, Task $tache): Response
{
return $this->deletedata($request, $tache, 'T');
}
/**
* @Route("/situation/{id}/delete", name="situation_delete", methods={"GET","POST"})
*/
public function deleteS(Request $request, Situation $situation): Response
{
return $this->deletedata($request, $situation, 'S');
}
public function deletedata($request, $data, $type): Response
{
if (isset($request->request)) {
$entityManager = $this->getDoctrine()->getManager();
if ($type=='T') {
$situations = $entityManager->getRepository(Situation::class)->findBy(['task'=>$data->getId()]);
foreach ($situations as $situation) {
$situations_risques = $entityManager->getRepository(SituationRisque::class)->findBy(['situation'=>$situation->getId()]);
foreach ($situations_risques as $situation_risque) {
$actions = $situation_risque->getActions();
foreach ($actions as $action) {
$entityManager->remove($action);
}
$entityManager->remove($situation_risque);
$entityManager->flush();
}
$entityManager->remove($situation);
$entityManager->flush();
}
} elseif ($type=='S') {
$situations_risques = $entityManager->getRepository(SituationRisque::class)->findBy(['situation'=>$data->getId()]);
foreach ($situations_risques as $situation_risque) {
$entityManager->remove($situation_risque);
$entityManager->flush();
}
}
$entityManager->remove($data);
$entityManager->flush();
$response =['deleted'=>1];
return new JsonResponse($response, 200);
}
}
/**
* @Route("/criticite/{id}/edit", name="edit_criticite", methods={"GET","POST"})
*/
public function editCriticite(Request $request, SituationRisque $situationRisque): Response
{
if (!$request->isXmlHttpRequest()) {
return new JsonResponse(array('status' => 'error','message' => 'Access forbidden!'), 400);
}
if (isset($request->request)) {
$entityManager = $this->getDoctrine()->getManager();
$listF= $entityManager->getRepository(Frequence::class)->findAll();
$listG= $entityManager->getRepository(Gravite::class)->findAll();
// dd($situationRisque);
$frequenceId=0;
$graviteId =0;
if ($situationRisque->getFrequence())
$frequenceId=$situationRisque->getFrequence()->getId();
if ($situationRisque->getGravite())
$graviteId=$situationRisque->getGravite()->getId();
$commentaire=$situationRisque->getCommentCR();
$idSR=$situationRisque->getId();
return $this->render('bilanTemplates/identification_sst/_formCR.html.twig', [
'frequenceId' => $frequenceId,
'graviteId' => $graviteId,
'commentaire'=> $commentaire,
'id'=>$idSR,
'frequences'=>$listF,
'gravites'=>$listG,
'type'=>'SSTmetier',
]);
}
}
/**
* @Route("/prevention/{id}/edit", name="edit_prevention", methods={"GET","POST"})
*/
public function editPrevention(Request $request, SituationRisque $situationRisque): Response
{
if (!$request->isXmlHttpRequest()) {
return new JsonResponse(array('status' => 'error','message' => 'Access forbidden!'), 400);
}
if (isset($request->request)) {
$entityManager = $this->getDoctrine()->getManager();
$listMOG= $entityManager->getRepository(MOG::class)->findAll();
$mogId =0;
if ($situationRisque->getMOG())
$mogId=$situationRisque->getMOG()->getId();
$commentaire=$situationRisque->getCommentRR();
$idSR=$situationRisque->getId();
return $this->render('bilanTemplates/identification_sst/_formRR.html.twig', [
'mogId' => $mogId,
'commentaire'=> $commentaire,
'id'=>$idSR,
'mogs'=>$listMOG,
'type'=>'SSTmetier',
]);
}
}
/**
* @Route("/saveCrticite", name="saveCrticite", methods={"GET","POST"})
*/
public function saveCrticite(Request $request,TaskRepository $taskRepository): Response
{
if (!$request->isXmlHttpRequest()) {
return new JsonResponse(array('status' => 'error','message' => 'Access forbidden!'), 400);
}
if (isset($request->request)) {
$idSR = $request->request->get('id');
$evaluer = $request->request->get('evaluer');
$commentaire= $request->request->get('commentaire');
$entityManager = $this->getDoctrine()->getManager();
$situation_risque = $entityManager->getRepository(SituationRisque::class)->findOneBy(['id'=>$idSR]);
if ($evaluer=='criticite') {
$idF= $request->request->get('frequence');
$idG= $request->request->get('gravite');
$frequence = $entityManager->getRepository(Frequence::class)->findOneBy(['id'=> substr($idF, strpos($idF, "_") + 1)]);
$gravite = $entityManager->getRepository(Gravite::class)->findOneBy(['id'=>substr($idG, strpos($idG, "_") + 1)]);
//old
//$criticite_array = $entityManager->getRepository(Criticite::class)->findBy(['type'=>'criticite']);
//updated by Chiheb
$criticite_array = $entityManager->getRepository(Criticite::class)->findBy(['type'=>'criticite'],['valeur'=>'asc']);
$situation_risque->setFrequence($frequence);
$situation_risque->setGravite($gravite);
$situation_risque->setCommentCR($commentaire);
try {
$entityManager->flush();
$noteF=$frequence->getNote();
$noteG=$gravite->getNote();
$criticiteValue=$noteF*$noteG;
//old
// usort($criticite_array, function ($a, $b) {
// return strcmp($a->getValeur(), $b->getValeur());
// });
$criticite='';
$criticite_color='#fff';
foreach ($criticite_array as $criticite_element) {
if ($criticiteValue >=$criticite_element->getValeur()) {
$criticite=$criticite_element->getLegende();
$criticite_valeur=$criticite_element->getValeur();
$criticite_color=$criticite_element->getCouleur();
}
}
$data =array('id' => $situation_risque->getId(),'frequence'=>$noteF,'gravite'=>$noteG,'criticiteVal'=> $criticiteValue,'criticiteLegende'=>$criticite,'criticiteColor'=>$criticite_color);
} catch (\Exception $e) {
$data = array('status' => 'error', 'message' => $e->getMessage());
}
}
if ($evaluer=='prevention') {
$idmog= $request->request->get('mog');
$mog = $entityManager->getRepository(MOG::class)->findOneBy(['id'=> substr($idmog, strpos($idmog, "_") + 1)]);
$prevention_array = $entityManager->getRepository(Criticite::class)->findBy(['type'=>'prevention'],['valeur'=>'asc']);
$situation_risque->setMOG($mog);
$situation_risque->setCommentRR($commentaire);
try {
$entityManager->flush();
$noteMog=$mog->getNote();
$noteF = $situation_risque->getFrequence()->getNote();
$noteG = $situation_risque->getGravite()->getNote();
$preventionVal=$taskRepository->calculRR(0, $noteMog, $noteF, $noteG);
$prevention='';
$prevention_color='#fff';
foreach ($prevention_array as $prevention_element) {
if ($preventionVal >=$prevention_element->getValeur()) {
$prevention=$prevention_element->getLegende();
$prevention_valeur=$prevention_element->getValeur();
$prevention_color=$prevention_element->getCouleur();
}
}
$data =array('id' => $situation_risque->getId(),'mog'=>$noteMog,'preventionVal'=> $preventionVal,'preventionLegende'=>$prevention,'preventionColor'=>$prevention_color);
} catch (\Exception $e) {
$data = array('status' => 'error', 'message' => $e->getMessage());
}
}
}
$response =$data;
return new JsonResponse($response, 200);
}
/**
* @Route("/mEtudier", name="metier_etudier",methods={"POST"})
*/
public function mEtudier(Request $request,JobRepository $jobRepository): Response
{
if (!$request->isXmlHttpRequest()) {
return new JsonResponse(array('status' => 'error','message' => 'Access forbidden!'), 400);
}
if (isset($request->request)) {
$entityManager = $this->getDoctrine()->getManager();
$metiers = $jobRepository->countAll();
$metierST= $jobRepository->countMEtudier();
$mEtudiers=($metierST/$metiers)*100;
$data =array('mEtudiers'=>$mEtudiers);
$response =$data;
return new JsonResponse($response, 200);
}
}
}