From f1baf4d87e8be38cee3ceb2ad528df4e94ba2133 Mon Sep 17 00:00:00 2001 From: afornerot Date: Wed, 7 Sep 2022 11:23:07 +0200 Subject: [PATCH 1/2] ne plus tenter de notifier (fixe #78) --- src/schedule-2.0/src/Controller/EventController.php | 2 +- src/schedule-2.0/src/Controller/ValidationController.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/schedule-2.0/src/Controller/EventController.php b/src/schedule-2.0/src/Controller/EventController.php index 0b7ae09..5e3e35c 100755 --- a/src/schedule-2.0/src/Controller/EventController.php +++ b/src/schedule-2.0/src/Controller/EventController.php @@ -288,7 +288,7 @@ class EventController extends AbstractController $idevent=$event->getId(); //$valid_url = $this->generateUrl('app_validationholiday',[],true); $valid_url = $this->router->generate('app_validationholiday', [], urlGeneratorInterface::ABSOLUTE_URL); - $this->notificator->sendNotifAttenteValid("Congés en attente de validation", $iduser, $idevent, $valid_url); + // $this->notificator->sendNotifAttenteValid("Congés en attente de validation", $iduser, $idevent, $valid_url); } diff --git a/src/schedule-2.0/src/Controller/ValidationController.php b/src/schedule-2.0/src/Controller/ValidationController.php index 024b51f..72c9446 100755 --- a/src/schedule-2.0/src/Controller/ValidationController.php +++ b/src/schedule-2.0/src/Controller/ValidationController.php @@ -500,7 +500,7 @@ class ValidationController extends AbstractController $em->flush(); $iduser=$event->getUser()->getId(); $idevent=$event->getId(); - $this->notificator->sendNotifValid("Congé validé", $iduser, $event); + // $this->notificator->sendNotifValid("Congé validé", $iduser, $event); } $output=[]; From bfedc2f5937c51a8b9635b56d58cc063d05bf913 Mon Sep 17 00:00:00 2001 From: afornerot Date: Thu, 8 Sep 2022 13:42:28 +0200 Subject: [PATCH 2/2] =?UTF-8?q?d=C3=A9blocage=20du=20max=201ETP=20par=20jo?= =?UTF-8?q?ur?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/Controller/EventController.php | 98 ++++++++++++++++++- .../src/Controller/ReportController.php | 22 +---- .../src/Controller/ValidationController.php | 27 ++--- .../templates/Report/synthese.html.twig | 57 +++++++---- .../templates/Validation/validation.html.twig | 40 ++++---- 5 files changed, 162 insertions(+), 82 deletions(-) diff --git a/src/schedule-2.0/src/Controller/EventController.php b/src/schedule-2.0/src/Controller/EventController.php index 5e3e35c..b9a7c4f 100755 --- a/src/schedule-2.0/src/Controller/EventController.php +++ b/src/schedule-2.0/src/Controller/EventController.php @@ -174,7 +174,13 @@ class EventController extends AbstractController // Astreinte if($astreinte) { - // 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 + // Une astreinte ne peut-etre un congès + if($task->getNature()->getIsvacation()) { + $output=["return"=>"KO","error"=>"Une astreinte ne peut être de nature congès","start"=>$datestart,"end"=>$dateend,"events"=>null]; + return new Response(json_encode($output)); + } + + // On regarde si une astreinte ne commence pas pendant une autre astreinte ou qui se termine pendant une autre astreinte ou qui a une astreinte compris dans ses dates $penaltys = $em->createQueryBuilder('penalty') ->select('penalty') ->from('App:Penalty','penalty') @@ -199,6 +205,42 @@ class EventController extends AbstractController return new Response(json_encode($output)); } + // On regarde si un évenement ne commence pas pendant un autre évenement ou qui se termine pendant un autre évenement ou qui a un évenement 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=[]; + $validate=false; + $holiday=false; + foreach($events as $event) { + $tmp=[ + "id" => $event->getId(), + "start" => $event->getStart(), + "end" => $event->getEnd(), + ]; + array_push($tbevent,$tmp); + if($event->getValidate()) $validate=true; + if($event->getTask()->getNature()->getIsvacation()) $holiday=true; + } + + if($validate) { + $output=["return"=>"KO","error"=>"Cet intervant a sa semaine de validé","start"=>$datestart,"end"=>$dateend,"events"=>$tbevent]; + return new Response(json_encode($output)); + } + elseif($holiday) { + $output=["return"=>"KO","error"=>"Cet intervant a posé des congés sur cette période","start"=>$datestart,"end"=>$dateend,"events"=>$tbevent]; + return new Response(json_encode($output)); + } + } + // Création de l'astreinte $penalty = new Penalty(); $penalty->setStart($datestart); @@ -232,6 +274,8 @@ class EventController extends AbstractController ->getQuery()->getResult(); if($events) { $tbevent=[]; + $validate=false; + $holiday=false; foreach($events as $event) { $tmp=[ "id" => $event->getId(), @@ -239,9 +283,26 @@ class EventController extends AbstractController "end" => $event->getEnd(), ]; array_push($tbevent,$tmp); + if($event->getValidate()) $validate=true; + if($event->getTask()->getNature()->getIsvacation()) $holiday=true; } - $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)); + + if(!$this->isGranted('ROLE_ADMIN')&&!$this->isGranted('ROLE_MASTER')) { + $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)); + } + elseif($validate) { + $output=["return"=>"KO","error"=>"Cet intervant a sa semaine de validé","start"=>$datestart,"end"=>$dateend,"events"=>$tbevent]; + return new Response(json_encode($output)); + } + elseif($holiday) { + $output=["return"=>"KO","error"=>"Cet intervant a posé des congés sur cette période","start"=>$datestart,"end"=>$dateend,"events"=>$tbevent]; + return new Response(json_encode($output)); + } + elseif($task->getNature()->getIsvacation()) { + $output=["return"=>"KO","error"=>"Vous ne pouvez pas poser de congés à cette date, une intervention y est déjà plannifiée","start"=>$datestart,"end"=>$dateend,"events"=>null]; + return new Response(json_encode($output)); + } } // On regarde si un jour férié ne commence pas pendant une autre intervention ou qui se termine pendant une autre intervention ou qui a une intervention compris dans ses dates @@ -328,6 +389,12 @@ class EventController extends AbstractController // Astreinte if($fgastreinte) { + // Une astreinte ne peut-etre un congès + if($task->getNature()->getIsvacation()) { + $output=["return"=>"KO","error"=>"Une astreinte ne peut être de nature congès"]; + return new Response(json_encode($output)); + } + // Recherche de l'event $penalty = $em->getRepository("App:Penalty")->find($idevent); if(!$penalty) { @@ -394,6 +461,7 @@ class EventController extends AbstractController $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') @@ -407,6 +475,9 @@ class EventController extends AbstractController ->getQuery()->getResult(); if($events) { $tbevent=[]; + $validate=false; + $holiday=false; + foreach($events as $ev) { if ($event->getId() != $ev->getId()) { $tmp=[ @@ -416,11 +487,28 @@ class EventController extends AbstractController "end" => $ev->getEnd(), ]; array_push($tbevent,$tmp); + if($ev->getValidate()) $validate=true; + if($ev->getTask()->getNature()->getIsvacation()) $holiday=true; } } + 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)); + if(!$this->isGranted('ROLE_ADMIN')&&!$this->isGranted('ROLE_MASTER')) { + $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)); + } + elseif($validate) { + $output=["return"=>"KO","error"=>"Cet intervant a sa semaine de validé","start"=>$datestart,"end"=>$dateend,"events"=>$tbevent]; + return new Response(json_encode($output)); + } + elseif($holiday) { + $output=["return"=>"KO","error"=>"Cet intervant a posé des congés sur cette période","start"=>$datestart,"end"=>$dateend,"events"=>$tbevent]; + return new Response(json_encode($output)); + } + elseif($task->getNature()->getIsvacation()) { + $output=["return"=>"KO","error"=>"Vous ne pouvez pas poser de congés à cette date, une intervention y est déjà plannifiée","start"=>$datestart,"end"=>$dateend,"events"=>null]; + return new Response(json_encode($output)); + } } } diff --git a/src/schedule-2.0/src/Controller/ReportController.php b/src/schedule-2.0/src/Controller/ReportController.php index 162403c..c20cd7a 100755 --- a/src/schedule-2.0/src/Controller/ReportController.php +++ b/src/schedule-2.0/src/Controller/ReportController.php @@ -53,15 +53,7 @@ class ReportController extends AbstractController $tmp["events"][$idday] = [ "date"=>clone $start, - "allday"=>false, - "colorday"=>"", - "descriptionday"=>"", - "am"=>false, - "coloram"=>"", - "descriptionam"=>"", - "ap"=>false, - "colorap"=>"", - "descriptionap"=>"", + "events"=>[], "astreinte"=>false, "colorastreinte"=>"", "descriptionastreinte"=>"", @@ -99,22 +91,16 @@ class ReportController extends AbstractController while($st<$event->getEnd()) { $idday=$st->format("Ymd"); if($event->getAllday()) { - $tmp["events"][$idday]["allday"]=true; - $tmp["events"][$idday]["colorday"]=$event->getTask()->getColor(); - $tmp["events"][$idday]["descriptionday"]=strtoupper($event->getTask()->getDisplayname())."\n\n".$event->getDescription(); + $tmp["events"][$idday]["events"][$event->getId()]=["allday"=>true,"colorday"=>$event->getTask()->getColor(),"descriptionday"=>strtoupper($event->getTask()->getDisplayname())."\n\n".$event->getDescription()]; } else { // Matin ou après-midi ? $time=$event->getStart()->format("H"); if($time==9) { - $tmp["events"][$idday]["am"]=true; - $tmp["events"][$idday]["coloram"]=$event->getTask()->getColor(); - $tmp["events"][$idday]["descriptionam"]=strtoupper($event->getTask()->getDisplayname())."\n\n".$event->getDescription(); + $tmp["events"][$idday]["events"][$event->getId()]=["allday"=>false,"am"=>true,"ap"=>false,"coloram"=>$event->getTask()->getColor(),"descriptionam"=>strtoupper($event->getTask()->getDisplayname())."\n\n".$event->getDescription()]; } else { - $tmp["events"][$idday]["ap"]=true; - $tmp["events"][$idday]["colorap"]=$event->getTask()->getColor(); - $tmp["events"][$idday]["descriptionap"]=strtoupper($event->getTask()->getDisplayname())."\n\n".$event->getDescription(); + $tmp["events"][$idday]["events"][$event->getId()]=["allday"=>false,"am"=>false,"ap"=>true,"colorap"=>$event->getTask()->getColor(),"descriptionap"=>strtoupper($event->getTask()->getDisplayname())."\n\n".$event->getDescription()]; } } diff --git a/src/schedule-2.0/src/Controller/ValidationController.php b/src/schedule-2.0/src/Controller/ValidationController.php index 72c9446..30d3537 100755 --- a/src/schedule-2.0/src/Controller/ValidationController.php +++ b/src/schedule-2.0/src/Controller/ValidationController.php @@ -101,16 +101,7 @@ class ValidationController extends AbstractController $tmp["events"][$idday] = [ "date"=>clone $start, - "allday"=>false, - "colorday"=>"", - "descriptionday"=>"", - "am"=>false, - "coloram"=>"", - "descriptionam"=>"", - "ap"=>false, - "colorap"=>"", - "descriptionap"=>"", - "validate"=>$validate, + "events"=>[], "astreinte"=>false, "colorastreinte"=>"", "descriptionastreinte"=>"", @@ -138,22 +129,16 @@ class ValidationController extends AbstractController while($st<$event->getEnd()) { $idday=$st->format("Ymd"); if($event->getAllday()) { - $tmp["events"][$idday]["allday"]=true; - $tmp["events"][$idday]["colorday"]=$event->getTask()->getColor(); - $tmp["events"][$idday]["descriptionday"]=strtoupper($event->getTask()->getDisplayname())."\n\n".$event->getDescription(); - } + $tmp["events"][$idday]["events"][$event->getId()]=["allday"=>true,"colorday"=>$event->getTask()->getColor(),"descriptionday"=>strtoupper($event->getTask()->getDisplayname())."\n\n".$event->getDescription(),"validate"=>$event->getValidate()]; + } else { // Matin ou après-midi ? $time=$event->getStart()->format("H"); if($time==9) { - $tmp["events"][$idday]["am"]=true; - $tmp["events"][$idday]["coloram"]=$event->getTask()->getColor(); - $tmp["events"][$idday]["descriptionam"]=strtoupper($event->getTask()->getDisplayname())."\n\n".$event->getDescription(); + $tmp["events"][$idday]["events"][$event->getId()]=["allday"=>false,"am"=>true,"ap"=>false,"coloram"=>$event->getTask()->getColor(),"descriptionam"=>strtoupper($event->getTask()->getDisplayname())."\n\n".$event->getDescription(),"validate"=>$event->getValidate()]; } else { - $tmp["events"][$idday]["ap"]=true; - $tmp["events"][$idday]["colorap"]=$event->getTask()->getColor(); - $tmp["events"][$idday]["descriptionap"]=strtoupper($event->getTask()->getDisplayname())."\n\n".$event->getDescription(); + $tmp["events"][$idday]["events"][$event->getId()]=["allday"=>false,"am"=>false,"ap"=>true,"colorap"=>$event->getTask()->getColor(),"descriptionap"=>strtoupper($event->getTask()->getDisplayname())."\n\n".$event->getDescription(),"validate"=>$event->getValidate()]; } } @@ -295,7 +280,7 @@ class ValidationController extends AbstractController } } - if($duration!= 5) { + if($duration< 5) { $output=["return"=>"KO","error"=>"Validation impossible = semaine incomplète"]; return new Response(json_encode($output)); } diff --git a/src/schedule-2.0/templates/Report/synthese.html.twig b/src/schedule-2.0/templates/Report/synthese.html.twig index f758afe..ccbc782 100644 --- a/src/schedule-2.0/templates/Report/synthese.html.twig +++ b/src/schedule-2.0/templates/Report/synthese.html.twig @@ -34,14 +34,16 @@ font-size: 12px; float:left; width:100%; - height: 18px; + height: 18px; + flex: 0 0 auto; } .am, .ap { font-size: 12px; float:left; width:50%; - height: 18px; + height: 18px; + flex: 0 0 auto; } .astreinte { @@ -83,27 +85,30 @@ {% endif %}
{{ event.date | date("d/m") }}
- {% if event.allday %} -
1
- {% else %} - {%if event.am %} -
0.5
- {% else %} -
- {% endif %} +
+ {% set haveam=false %} + {% for detail in event.events %} + {% if detail.allday %} +
1
+ {% else %} + {%if detail.am %} + {% set haveam=true %} +
0.5
+ {% endif %} - {%if event.ap %} -
0.5
- {% else %} -
- {% endif %} - {% endif %} + {%if detail.ap %} + {% if not haveam %}
{%endif%} +
0.5
+ {% endif %} + {% endif %} + {% endfor %} - {% if event.astreinte %} -
*
- {% else %} -
- {% endif %} + {% if event.astreinte %} +
*
+ {% else %} +
+ {% endif %} +
{% set nbday=nbday+1 %} @@ -126,4 +131,14 @@ function myprint() { document.location.href="{{path(app.request.attributes.get('_route'),{fgprint:true})}}"; } + + $(document).ready(function() { + maxheight=0; + $( ".card" ).each(function( index ) { + if($(this).height()>maxheight) + maxheight=$(this).height(); + }); + $( ".card" ).height(maxheight); + }); + {% endblock %} \ No newline at end of file diff --git a/src/schedule-2.0/templates/Validation/validation.html.twig b/src/schedule-2.0/templates/Validation/validation.html.twig index f22f5d3..8df499b 100644 --- a/src/schedule-2.0/templates/Validation/validation.html.twig +++ b/src/schedule-2.0/templates/Validation/validation.html.twig @@ -34,14 +34,16 @@ font-size: 12px; float:left; width:100%; - height: 18px; + height: 18px; + flex: 0 0 auto; } .am, .ap { font-size: 12px; float:left; width:50%; - height: 18px; + height: 18px; + flex: 0 0 auto; } .astreinte { @@ -83,7 +85,8 @@ {% if nbday==1 %} - {% if event.validate %} + {% set first=event.events|first %} + {% if first and first.validate %} {%else%} @@ -95,21 +98,24 @@
{{ event.date | date("d/m") }}
- {% if event.allday %} -
1
- {% else %} - {%if event.am %} -
0.5
- {% else %} -
- {% endif %} +
+ {% set haveam=false %} + {% for detail in event.events %} + {% if detail.allday %} +
1
+ {% else %} + {%if detail.am %} + {% set haveam=true %} +
0.5
+ {% endif %} - {%if event.ap %} -
0.5
- {% else %} -
- {% endif %} - {% endif %} + {%if detail.ap %} + {% if not haveam %}
{%endif%} +
0.5
+ {% endif %} + {% endif %} + {% endfor %} +
{% if event.astreinte %}
*