319 lines
12 KiB
PHP
319 lines
12 KiB
PHP
<?php
|
|
|
|
namespace App\Controller;
|
|
|
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
|
use Symfony\Component\HttpFoundation\Request;
|
|
use Symfony\Component\HttpFoundation\Response;
|
|
use Doctrine\ORM\EntityManagerInterface;
|
|
|
|
use App\Entity\Timer as Entity;
|
|
use App\Form\TimerType as Form;
|
|
|
|
class TimerController extends AbstractController
|
|
{
|
|
private $data = "timer";
|
|
private $route = "app_timer";
|
|
private $render = "Timer/";
|
|
private $entity = "App:Timer";
|
|
|
|
public function list(Request $request)
|
|
{
|
|
$em = $this->getDoctrine()->getManager();
|
|
|
|
$iduser = $this->get("session")->get("iduser");
|
|
$user = $em->getRepository("App:User")->find($iduser);
|
|
$tasks = $em->getRepository("App:Task")->findAll();
|
|
$timers = $em->getRepository("App:Timer")->findBy(["user"=>$iduser]);
|
|
|
|
return $this->render($this->render.'list.html.twig',[
|
|
"useheader" => true,
|
|
"usesidebar" => true,
|
|
"user" => $user,
|
|
"tasks" => $tasks,
|
|
"timers" => $timers,
|
|
]);
|
|
}
|
|
|
|
public function view(Request $request)
|
|
{
|
|
$em = $this->getDoctrine()->getManager();
|
|
|
|
$iduser = $this->get("session")->get("iduser");
|
|
$user = $em->getRepository("App:User")->find($iduser);
|
|
$tasks = $em->getRepository("App:Task")->findAll();
|
|
$timers = $em->getRepository("App:Timer")->findBy(["user"=>$iduser]);
|
|
|
|
return $this->render($this->render.'list.cal.html.twig',[
|
|
"useheader" => true,
|
|
"usesidebar" => true,
|
|
"user" => $user,
|
|
"tasks" => $tasks,
|
|
"timers" => $timers,
|
|
]);
|
|
}
|
|
|
|
public function load(Request $request)
|
|
{
|
|
$em = $this->getDoctrine()->getManager();
|
|
$tbtimers=[];
|
|
|
|
// Evenements
|
|
$iduser=$this->get("session")->get("iduser");
|
|
if($iduser=="all")
|
|
$timers=$em->getRepository("App:Timer")->findAll();
|
|
else {
|
|
$iduser=$this->get("session")->get("iduser");
|
|
$user=$em->getRepository("App:User")->find($iduser);
|
|
$timers=$em->getRepository("App:Timer")->findBy(["user"=>$user]);
|
|
}
|
|
|
|
foreach($timers as $timer) {
|
|
$tmp=$this->formatTimer($timer);
|
|
array_push($tbtimers,$tmp);
|
|
}
|
|
|
|
// Retour
|
|
return new Response(json_encode($tbtimers));
|
|
}
|
|
|
|
public function create(Request $request)
|
|
{
|
|
// Initialisation de l'enregistrement
|
|
$em = $this->getDoctrine()->getManager();
|
|
$iduser = $this->get("session")->get("iduser");
|
|
$user = $em->getRepository("App:User")->find($iduser);
|
|
$taskid = $request->request->get('taskid');
|
|
$description = $request->request->get('description');
|
|
$task = $em->getRepository("App:Task")->find($taskid);
|
|
$start = \DateTime::createFromFormat('D M d Y H:i:s e+',$request->request->get('start'));
|
|
$end = \DateTime::createFromFormat('D M d Y H:i:s e+',$request->request->get('end'));
|
|
$duration = new \DateTime(date("H:i:s", ($request->request->get('duration')/1000)));
|
|
$duration->sub(new \DateInterval('PT1H'));
|
|
$activepenalty = $request->request->get('activepenalty');
|
|
$additionalhour= $request->request->get('additionalhour');
|
|
|
|
$officeworkstart = clone $start;
|
|
$officeworkend = clone $officeworkstart;
|
|
$officeworkstart->SetTime(9,0,0);
|
|
$officeworkend->SetTime(17,30,0);
|
|
if ($start < $officeworkstart || $end > $officeworkend) {
|
|
$timer->setAdditionalHour(true);
|
|
}else{
|
|
$timer->setAdditionalHour($additionalhour);
|
|
}
|
|
|
|
$timer = new Entity();
|
|
$timer->setUser($user);
|
|
$timer->setTask($task);
|
|
$timer->setStart($start);
|
|
$timer->setEnd($end);
|
|
$timer->setDuration($duration);
|
|
$timer->setDescription($description);
|
|
$timer->setActivePenalty($activepenalty);
|
|
$em->persist($timer);
|
|
$em->flush();
|
|
|
|
$output=["return"=>"OK"];
|
|
return new Response(json_encode($output));
|
|
}
|
|
|
|
public function submit(Request $request)
|
|
{
|
|
// Initialisation de l'enregistrement
|
|
$em = $this->getDoctrine()->getManager();
|
|
$data = new Entity();
|
|
|
|
$iduser = $this->get("session")->get("iduser");
|
|
$user = $em->getRepository("App:User")->find($iduser);
|
|
|
|
// Création du formulaire
|
|
$form = $this->createForm(Form::class,$data,array("mode"=>"submit"));
|
|
|
|
// Récupération des data du formulaire
|
|
$form->handleRequest($request);
|
|
|
|
// Sur erreur
|
|
$this->getErrorForm(null,$form,$request,$data,"submit");
|
|
|
|
// Sur validation
|
|
if ($form->get('submit')->isClicked() && $form->isValid()) {
|
|
$data = $form->getData();
|
|
$data->setUser($user);
|
|
|
|
$start = $data->getStart();
|
|
$end = $data->getEnd();
|
|
$additionalhour = $data->getAdditionalHour();
|
|
|
|
$officeworkstart = clone $start;
|
|
$officeworkend = clone $officeworkstart;
|
|
$uStart = explode(":",$this->getParameter('officeHourStart'));
|
|
$uEnd = explode(":",$this->getParameter('officeHourEnd'));
|
|
$officeworkstart->SetTime(intval($uStart[0]),intval($uStart[1]),0);
|
|
$officeworkend->SetTime(intval($uEnd[0]),intval($uEnd[1]),0);
|
|
if ($start < $officeworkstart || $end > $officeworkend) {
|
|
$data->setAdditionalHour(true);
|
|
}else{
|
|
$data->setAdditionalHour($additionalhour);
|
|
}
|
|
$em->persist($data);
|
|
$em->flush();
|
|
|
|
// Retour à la liste
|
|
return $this->redirectToRoute($this->route);
|
|
}
|
|
|
|
// Affichage du formulaire
|
|
return $this->render($this->render.'edit.html.twig', [
|
|
'useheader' => true,
|
|
'usesidebar' => true,
|
|
$this->data => $data,
|
|
'mode' => 'submit',
|
|
'form' => $form->createView()
|
|
]);
|
|
}
|
|
|
|
public function update($id,Request $request)
|
|
{
|
|
// Initialisation de l'enregistrement
|
|
$em = $this->getDoctrine()->getManager();
|
|
$data=$em->getRepository($this->entity)->find($id);
|
|
|
|
// Création du formulaire
|
|
$form = $this->createForm(Form::class,$data,array("mode"=>"update"));
|
|
|
|
// Récupération des data du formulaire
|
|
$form->handleRequest($request);
|
|
|
|
// Sur erreur
|
|
$this->getErrorForm(null,$form,$request,$data,"update");
|
|
|
|
// Sur validation
|
|
if ($form->get('submit')->isClicked() && $form->isValid()) {
|
|
$data = $form->getData();
|
|
$em->persist($data);
|
|
$em->flush();
|
|
|
|
// Retour à la liste
|
|
return $this->redirectToRoute($this->route);
|
|
}
|
|
|
|
|
|
return $this->render($this->render.'edit.html.twig', [
|
|
'useheader' => true,
|
|
'usesidebar' => true,
|
|
$this->data => $data,
|
|
'mode' => 'update',
|
|
'form' => $form->createView()
|
|
]);
|
|
|
|
}
|
|
public function delete($id, Request $request)
|
|
{
|
|
// Initialisation de l'enregistrement
|
|
$em = $this->getDoctrine()->getManager();
|
|
$data=$em->getRepository($this->entity)->find($id);
|
|
|
|
// Controle avant suppression
|
|
$error=false;
|
|
if($error)
|
|
return $this->redirectToRoute($this->route."_update",["id"=>$id]);
|
|
else {
|
|
try {
|
|
$em->remove($data);
|
|
$em->flush();
|
|
}
|
|
catch(\Doctrine\DBAL\DBALException $e) {
|
|
// Création du formulaire
|
|
$this->get('session')->getFlashBag()->add('error', 'Impossible de supprimer cet enregistrement');
|
|
return $this->redirectToRoute($this->route."_update",["id"=>$id]);
|
|
}
|
|
|
|
// Retour à la liste
|
|
return $this->redirectToRoute($this->route);
|
|
}
|
|
}
|
|
|
|
public function export(Request $request,$access=null): Response
|
|
{
|
|
|
|
$em = $this->getDoctrine()->getManager();
|
|
|
|
$iduser = $this->get("session")->get("iduser");
|
|
$user = $em->getRepository("App:User")->find($iduser);
|
|
$tasks = $em->getRepository("App:Task")->findAll();
|
|
$timers = $em->getRepository("App:Timer")->findBy(["user"=>$iduser]);
|
|
$tbtimers = [];
|
|
foreach ($timers as $timer) {
|
|
$isactive = $timer->getActivePenalty();
|
|
$isadditional = $timer->getAdditionalHour();
|
|
if ($isactive || $isadditional) {
|
|
$tbtimer["id"] = $timer->getId();
|
|
$tbtimer["taskname"] = $timer->getTask()->getDisplayname();
|
|
$tbtimer["user"] = $timer->getUser()->getUsername();
|
|
$tbtimer["start"] = $timer->getStart()->format("Y-m-d H:i");
|
|
$tbtimer["end"] = $timer->getEnd()->format("Y-m-d H:i");
|
|
$tbtimer["duration"] = $timer->getDuration();
|
|
$tbtimer["activepenalty"] = $timer->getActivePenalty();
|
|
$tbtimer["additionalhour"] = $timer->getAdditionalHour();
|
|
$tbtimer["description"] = $timer->getDescription();
|
|
array_push($tbtimers, $tbtimer);
|
|
}
|
|
|
|
}
|
|
|
|
$csv = $this->renderView('Timer/export.csv.twig', ["timers" => $tbtimers]);
|
|
$response = new Response($csv);
|
|
$response->headers->set('Content-Type', 'text/csv; charset=utf-8');
|
|
$response->headers->set('Content-Disposition', 'attachment; filename="export.csv"');
|
|
|
|
return $response;
|
|
}
|
|
|
|
protected function getErrorForm($id,$form,$request,$data,$mode) {
|
|
if ($form->get('submit')->isClicked()&&$mode=="delete") {
|
|
}
|
|
|
|
if ($form->get('submit')->isClicked() && $mode=="submit") {
|
|
}
|
|
|
|
if ($form->get('submit')->isClicked() && !$form->isValid()) {
|
|
$this->get('session')->getFlashBag()->clear();
|
|
|
|
$errors = $form->getErrors();
|
|
foreach( $errors as $error ) {
|
|
$request->getSession()->getFlashBag()->add("error", $error->getMessage());
|
|
}
|
|
}
|
|
}
|
|
public function formatTimer($timer) {
|
|
|
|
$tmp= [
|
|
"id"=> $timer->getId(),
|
|
"title" => $timer->getTask()->getDisplayname(),
|
|
"start" => $timer->getStart()->format("Y-m-d H:i"),
|
|
"end" => $timer->getEnd()->format("Y-m-d H:i"),
|
|
"backgroundColor" => $timer->getTask()->getColor(),
|
|
"borderColor" => $timer->getTask()->getColor(),
|
|
"textColor" => "#ffffff",
|
|
"allDay" => false,
|
|
"editable" => true,
|
|
"durationEditable" => false,
|
|
"extendedProps" => [
|
|
"fulldescription" => $timer->getTask()->getDisplayname()."\n\n".$timer->getDescription(),
|
|
"description" => $timer->getDescription(),
|
|
"userid" => $timer->getUser()->getId(),
|
|
"username" => $timer->getUser()->getUsername(),
|
|
"taskid" => $timer->getTask()->getId(),
|
|
"avatar" => "/".$this->getParameter("appAlias")."/uploads/avatar/".$timer->getUser()->getAvatar(),
|
|
"estimate" => $timer->getDuration()->format("H:i"),
|
|
"locked" => false,
|
|
"editable" => true,
|
|
"astreinte" => false
|
|
]
|
|
];
|
|
return $tmp;
|
|
}
|
|
|
|
}
|