<?php
namespace App\Controller\ergonomie;
use App\Entity\bilan\Mission;
use App\Entity\bilan\Job;
use App\Entity\User;
use App\Entity\Processus;
use App\Entity\Ergonomie;
use App\Repository\ErgonomieRepository;
use App\Utils\Utility;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
use Symfony\Component\Mime\FileinfoMimeTypeGuesser;
use Dompdf\Dompdf;
use Dompdf\Options;
use App\Repository\bilan\JobRepository;
use App\Repository\ProcessusRepository;
/**
* @Route("/analyseErgo")
*/
class AnalyseErgonomieController extends AbstractController
{
private ProcessusRepository $processusRepository;
private JobRepository $jobRepository;
public function __construct(ProcessusRepository $processusRepository, JobRepository $jobRepository)
{
$this->processusRepository = $processusRepository;
$this->jobRepository = $jobRepository;
}
private function getYearsList(): array
{
$currentYear = (int)date('Y');
$years = [];
for ($year = $currentYear; $year >= 2020; $year--) {
$years[] = $year;
}
return $years;
}
/**
* @Route("/", name="analyse_ergonomie", methods={"GET"})
*/
public function AllAnalysesErgo(Request $request, ErgonomieRepository $ergonomieRepository): Response
{
$processus = $this->processusRepository->findProcessusInternal();
$jobs = $this->jobRepository->findByUserEntity();
$missions = $this->getDoctrine()->getRepository(Mission::class)->findAll();
// Fetch all ergonomie records with details
$analysesErgo = $ergonomieRepository->findAllWithDetails();
$years = $this->getYearsList();
$users=[];
foreach($processus as $proc)
{
$user = $proc->getPilote();
if(!in_array($user,$users) && (!is_null($user))){
$users[]=$user;
}
}
$menu="evaluate";
$left_menu="analyse_ergonomie";
return $this->render('ergonomie/analyse/index.html.twig', [
'menu' => $menu,
'left_menu' => $left_menu,
'processus' => $processus,
'users' => $users,
'jobs' => $jobs,
'missions' => $missions,
'analyses' => $analysesErgo,
'years' => $years
]);
/*$missions = $this->getDoctrine()->getRepository(Mission::class)->findAll();
$processuses = $this->getDoctrine()->getRepository(Processus::class)->findAll();
$jobs = $this->getDoctrine()->getRepository(Job::class)->findAll();
$users = $this->getDoctrine()->getRepository(User::class)->findAll();
//$analysesErgo = $this->getDoctrine()->getRepository(Ergonimie::class)->findAll();
// Fetch all ergonomie records with details
$analysesErgo = $ergonomieRepository->findAllWithDetails();
$menu="evaluate";
$left_menu="analyse_ergonomie";
return $this->render('ergonomie/analyse/index.html.twig',[
'menu' => $menu,
'left_menu' => $left_menu,
'missions' => $missions,
'processuses' => $processuses,
'jobs' => $jobs,
'users' => $users,
'analyses' => $analysesErgo
]);*/
}
/**
* @Route("/create", name="ergonomie_create", methods={"GET", "POST"})
*/
public function create(Request $request, /*EntityManagerInterface $em, */ ErgonomieRepository $ergonomieRepository): Response
{
/*if (!$request->isXmlHttpRequest()) {
return new JsonResponse(array('status' => 'error','message' => 'Access forbidden!'), 400);
}*/
if(isset($request->request))
{
$em = $this->getDoctrine()->getManager();
$loggedin_user = $this->getUser();
// Create a new Ergonomie entity
$ergonomie = new Ergonomie();
// Create a new Utility entity
$utility = new Utility;
/* genretate ref */
$oldRef = $ergonomieRepository->findLastRef(Ergonomie::PREFIX);
$newRef = $utility->generateNewRef($oldRef, Ergonomie::PREFIX);
$ergonomie->setRef($newRef ?? null);
// Set all fields from the request data
$ergonomie->setDateAnalyse(new \DateTime($request->get('date_analyse')));
$ergonomie->setJob($em->getRepository(Job::class)->find($request->get('job_id')));
$ergonomie->setProcessus($em->getRepository(Processus::class)->find($request->get('processus_id')));
$ergonomie->setMission($em->getRepository(Mission::class)->find($request->get('mission_id')));
$ergonomie->setCreatedBy($loggedin_user);
// Set all string fields (nullable)
$ergonomie->setResponsible($request->get('responsible') ?? null);
$ergonomie->setFonction($request->get('fonction') ?? null);
$ergonomie->setUpperArmRight($request->get('upperArmRight') ?? null);
$ergonomie->setUpperArmLeft($request->get('upperArmLeft') ?? null);
$ergonomie->setShoulderRaised($request->get('shoulderRaised') ?? null);
$ergonomie->setUpperArmAbducted($request->get('upperArmAbducted') ?? null);
$ergonomie->setArmSupported($request->get('armSupported') ?? null);
$ergonomie->setLowerArmRight($request->get('lowerArmRight') ?? null);
$ergonomie->setLowerArmLeft($request->get('lowerArmLeft') ?? null);
$ergonomie->setEitherArmWorking($request->get('eitherArmWorking') ?? null);
$ergonomie->setWristRight($request->get('wristRight') ?? null);
$ergonomie->setWristLeft($request->get('wristLeft') ?? null);
$ergonomie->setWristBent($request->get('wristBent') ?? null);
$ergonomie->setWristTwistRange($request->get('wristTwistRange') ?? null);
$ergonomie->setMusculeUseScore($request->get('musculeUseScore') ?? null);
$ergonomie->setLoadScore($request->get('loadScore') ?? null);
$ergonomie->setNeckPos($request->get('neckPos') ?? null);
$ergonomie->setNeckTwisted($request->get('neckTwisted') ?? null);
$ergonomie->setNeckBending($request->get('neckBending') ?? null);
$ergonomie->setTrunkPos($request->get('trunkPos') ?? null);
$ergonomie->setTrunkTwisted($request->get('trunkTwisted') ?? null);
$ergonomie->setTrunkBending($request->get('trunkBending') ?? null);
$ergonomie->setLegsSupported($request->get('legsSupported') ?? null);
$ergonomie->setLegsMusculeScore($request->get('legsMusculeScore') ?? null);
$ergonomie->setLoadScoreLegs($request->get('loadScoreLegs') ?? null);
// Set all integer fields
$ergonomie->setScorePoignetBras($request->get('scorePoignetBras'));
$ergonomie->setScoreTroncNuqueJambes($request->get('scoreTroncNuqueJambes'));
$ergonomie->setScoreFinal($request->get('scoreFinal'));
// Persist and save the entity
$em->persist($ergonomie);
$em->flush();
// Return the ID of the created entity
$response = array('status' => 'success', 'id' => $ergonomie->getId());
}
return new JsonResponse($response,200);
}
/**
* @Route("/analyseErgoData", name="analyse_ergo_data", methods={"GET", "POST"})
*/
public function analyseErgoData(Request $request, ErgonomieRepository $ergonomieRepository): Response
{
$niveaux = array(
array('ACCEPTABLE', '#40a103'),
array('ACCEPTABLE', '#40a103'),
array('CONTRAIGNANTE', '#e1e508'),
array('CONTRAIGNANTE', '#e1e508'),
array('TRES CONTRAIGNANTE', '#fe9200'),
array('TRES CONTRAIGNANTE', '#fe9200'),
array('INNACEPTABLE', '#e32f07'),
);
$listErgonomie = $ergonomieRepository->findAllWithDetails();
$data = [];
foreach ($listErgonomie as $ergo) {
$data[] = [
'id'=> $ergo['id'],
'ref'=> $ergo['ref'],
'show_item' => $ergo['id'],
'date_analyse'=> $ergo['date_analyse']->format('d-m-Y'),
'job_name'=> $ergo['job_name'],
'mission_name' => $ergo['mission_name'],
'scorePoignetBras' => $ergo['scorePoignetBras'],
'scoreTroncNuqueJambes' => $ergo['scoreTroncNuqueJambes'],
'scoreFinal' => '<span class="label" style="background:'.$niveaux[(int)$ergo['scoreFinal']-1][1].';">'.$niveaux[(int)$ergo['scoreFinal']-1][0].'</span>',
'processus_id' => '<a class="label btn-indicator" style="cursor:pointer" href="/action/new?sr='.$ergo['mission_id'].'&pr='.$ergo['processus_id'].'">Planifier ?</a>',
'responsible_name' => $ergo['responsible'],
'processus_name' => $ergo['processus_name'],
'action' => $ergo['id'],
'processus' => $ergo['processus_name'],
'job'=> $ergo['job_name'],
'mission' => $ergo['mission_name'],
'responsible' => $ergo['responsible'],
'yearErgo'=> $ergo['date_analyse']->format('Y'),
];
}
return new JsonResponse(['data' => $data]);
}
/**
* @Route("/delete/{id}", name="ergonomie_delete", methods={"GET"})
*/
public function delete(Request $request, Ergonomie $ergonomie): Response
{
$em = $this->getDoctrine()->getManager();
if($ergonomie){
$em->remove($ergonomie);
$em->flush();
}
return $this->redirect($request->headers->get('referer'));
}
/**
* @Route("/show/{id}", name="analyse_ergonomie_show", methods={"GET"})
*/
public function show(Request $request, Ergonomie $ergonomie): Response
{
$em = $this->getDoctrine()->getManager();
$menu="evaluate";
$left_menu="analyse_ergonomie";
return $this->render('ergonomie/show.html.twig',[
'menu' => $menu,
'left_menu' => $left_menu,
'ergo' => $ergonomie
]);
}
}