diff --git a/src/schedule-2.0/src/Controller/EventController.php b/src/schedule-2.0/src/Controller/EventController.php index 411ba35..f54d1c1 100755 --- a/src/schedule-2.0/src/Controller/EventController.php +++ b/src/schedule-2.0/src/Controller/EventController.php @@ -99,6 +99,7 @@ class EventController extends AbstractController $am = ($request->request->get('am')=="true"); $ap = ($request->request->get('ap')=="true"); $astreinte = ($request->request->get('astreinte')=="true"); + $externaltrip = ($request->request->get('externaltrip')=="true"); $description = $request->request->get('description'); $user = $em->getRepository("App:User")->find($iduser); @@ -242,6 +243,7 @@ class EventController extends AbstractController $event->setEnd($dateend); $event->setDuration($duration); $event->setAllday($allday); + $event->setExternalTrip($externaltrip); $event->setDescription($description); $event->setUser($user); $event->setTask($task); @@ -271,7 +273,10 @@ class EventController extends AbstractController $idevent = str_replace("A","",$request->request->get('idevent')); $iduser = $request->request->get('iduser'); $idtask = $request->request->get('idtask'); + $am = ($request->request->get('am')=="true"); + $ap = ($request->request->get('ap')=="true"); $fgastreinte = ($request->request->get('fgastreinte')=="true"); + $externaltrip = ($request->request->get('externaltrip')=="true"); $description = $request->request->get('description'); $user = $em->getRepository("App:User")->find($iduser); @@ -327,17 +332,82 @@ class EventController extends AbstractController return new Response(json_encode($output)); } + $datestart=$event->getStart(); + $dateend =$event->getEnd(); + $duration=$dateend->diff($datestart)->d; + if($am&&$ap) { + if ($duration >= 1) { + $dateend->SetTime(0,0,-1); + } + $datestart->SetTime(0,0,0); + $dateend->add(new \DateInterval('P1D')); + $dateend->SetTime(0,0,0); + $duration=$dateend->diff($datestart)->d; + $allday=true; + } + else { + $duration=$dateend->diff($datestart)->d; + if ($duration == 1) { + $dateend->SetTime(0,0,-1); + } + $duration=0.5; + $allday=false; + if($am) { + $datestart->SetTime(9,0,0); + $dateend->SetTime(12,0,0); + } + else { + $datestart->SetTime(13,0,0); + $dateend->SetTime(17,0,0); + } + } + // On regarde si une tache ne commence pas pendant une autre intervention ou qui se termine pendant une autre intervention ou qui a une intervention compris dans ses dates + $events = $em->createQueryBuilder('event') + ->select('event') + ->from('App:Event','event') + ->Where('event.user=:user AND event.start<=:start AND event.end >:start') + ->orWhere('event.user=:user AND event.start<:end AND event.end >=:end') + ->orWhere('event.user=:user AND event.start>:start AND event.end <:end') + ->setParameter('user',$iduser) + ->setParameter('start',$datestart) + ->setParameter('end',$dateend) + ->getQuery()->getResult(); + if($events) { + $tbevent=[]; + foreach($events as $ev) { + if ($event->getId() != $ev->getId()) { + $tmp=[ + "id" => $ev->getId(), + "task" => $ev->getTask()->getName(), + "start" => $ev->getStart(), + "end" => $ev->getEnd(), + ]; + array_push($tbevent,$tmp); + } + } + if (sizeof($tbevent)>0) { + $output=["return"=>"KO","error"=>"Cet intervant a déjà une tache à cette date","start"=>$datestart,"end"=>$dateend,"events"=>$tbevent]; + return new Response(json_encode($output)); + } + + } + + // Modification de l'évenement + $event->setStart($datestart); + $event->setEnd($dateend); $event->setDescription($description); + $event->setDuration($duration); + $event->setAllday($allday); + $event->setExternalTrip($externaltrip); $event->setUser($user); $event->setTask($task); - + $em->persist($event); $em->flush(); $output=$this->formatEvent($event); } - return new Response(json_encode($output)); } @@ -411,6 +481,8 @@ class EventController extends AbstractController "borderColor" => $event->getTask()->getColor(), "textColor" => "#ffffff", "allDay" => $event->getAllday(), + "holiday" => $event->getTask()->getNature()->getIsvacation(), + "externaltrip" => ($event instanceof Penalty?$event->getExternalTrip():false), "editable" => $editable, "durationEditable" => false, "extendedProps" => [ @@ -441,6 +513,8 @@ class EventController extends AbstractController "borderColor" => "#cdcdcd", "textColor" => "#ffffff", "allDay" => true, + "externaltrip" => false, + "holiday" => false, "editable" => false, "durationEditable" => false, "extendedProps" => [ diff --git a/src/schedule-2.0/src/Entity/Event.php b/src/schedule-2.0/src/Entity/Event.php index eb026c2..491a1ae 100644 --- a/src/schedule-2.0/src/Entity/Event.php +++ b/src/schedule-2.0/src/Entity/Event.php @@ -50,6 +50,12 @@ class Event */ private $allday; + /** + * @ORM\Column(name="externaltrip", type="boolean") + * + */ + private $externaltrip; + /** * @ORM\Column(name="validate", type="boolean") * @@ -96,24 +102,24 @@ class Event public function getStart(): ?\DateTimeInterface { - return $this->start; + return clone $this->start; } public function setStart(\DateTimeInterface $start): self { - $this->start = $start; + $this->start = clone $start; return $this; } public function getEnd(): ?\DateTimeInterface { - return $this->end; + return clone $this->end; } public function setEnd(\DateTimeInterface $end): self { - $this->end = $end; + $this->end = clone $end; return $this; } @@ -129,6 +135,17 @@ class Event return $this; } + public function getExternalTrip(): ?bool + { + return $this->externaltrip; + } + + public function setExternalTrip(bool $externaltrip): self + { + $this->externaltrip = $externaltrip; + + return $this; + } public function getValidate(): ?bool { diff --git a/src/schedule-2.0/templates/Event/list.html.twig b/src/schedule-2.0/templates/Event/list.html.twig index 8a87477..896d2f9 100644 --- a/src/schedule-2.0/templates/Event/list.html.twig +++ b/src/schedule-2.0/templates/Event/list.html.twig @@ -109,6 +109,12 @@ +