déblocage du max 1ETP par jour

This commit is contained in:
afornerot
2022-09-08 13:42:28 +02:00
parent f1baf4d87e
commit bfedc2f593
5 changed files with 162 additions and 82 deletions

View File

@@ -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));
}
}
}

View File

@@ -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()];
}
}

View File

@@ -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));
}

View File

@@ -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 %}
<td>
<div class="date">{{ event.date | date("d/m") }}</div>
{% if event.allday %}
<div class='allday' style='background-color:{{ event.colorday }};' title='{{ event.descriptionday }}'>1</div>
{% else %}
{%if event.am %}
<div class='am' style='background-color:{{ event.coloram }};' title='{{ event.descriptionam }}'>0.5</div>
{% else %}
<div class='am'></div>
{% endif %}
<div class="d-flex flex-wrap">
{% set haveam=false %}
{% for detail in event.events %}
{% if detail.allday %}
<div class='allday' style='background-color:{{ detail.colorday }};' title='{{ detail.descriptionday }}'>1</div>
{% else %}
{%if detail.am %}
{% set haveam=true %}
<div class='am' style='background-color:{{ detail.coloram }};' title='{{ detail.descriptionam }}'>0.5</div>
{% endif %}
{%if event.ap %}
<div class='ap' style='background-color:{{ event.colorap }};' title='{{ event.descriptionap }}'>0.5</div>
{% else %}
<div class='ap'></div>
{% endif %}
{% endif %}
{%if detail.ap %}
{% if not haveam %}<div class='am'></div>{%endif%}
<div class='ap ml-auto' style='background-color:{{ detail.colorap }};' title='{{ detail.descriptionap }}'>0.5</div>
{% endif %}
{% endif %}
{% endfor %}
{% if event.astreinte %}
<div class='astreinte' style='background-color:{{ event.colorastreinte }};' title='{{ event.descriptionastreinte }}'>*</div>
{% else %}
<div class='astreinte'></div>
{% endif %}
{% if event.astreinte %}
<div class='astreinte' style='background-color:{{ event.colorastreinte }};' title='{{ event.descriptionastreinte }}'>*</div>
{% else %}
<div class='astreinte'></div>
{% endif %}
</div>
</td>
{% 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 %}

View File

@@ -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 %}
<tr id="{{user.user.id}}-{{event.date|date("Ymd")}}"}">
<td class="no-print" style="vertical-align:middle">
{% if event.validate %}
{% set first=event.events|first %}
{% if first and first.validate %}
<i class="fa fa-thumbs-down devalidate-{{user.user.id}}" onClick="devalidate({{user.user.id}},'{{event.date|date("Ymd")}}','{{event.date|date("m/d/Y")}}')" style="cursor:pointer; color:red;"></i>
{%else%}
<i class="fa fa-thumbs-up validate-{{user.user.id}}" onClick="validate({{user.user.id}},'{{event.date|date("Ymd")}}','{{event.date|date("m/d/Y")}}')" style="cursor:pointer; color:green;{% if btnvalidate %}display:none{% endif %}"></i>
@@ -95,21 +98,24 @@
<td>
<div class="date">{{ event.date | date("d/m") }}</div>
{% if event.allday %}
<div class='allday' style='background-color:{{ event.colorday }};' title='{{ event.descriptionday }}'>1</div>
{% else %}
{%if event.am %}
<div class='am' style='background-color:{{ event.coloram }};' title='{{ event.descriptionam }}'>0.5</div>
{% else %}
<div class='am'></div>
{% endif %}
<div class="d-flex flex-wrap">
{% set haveam=false %}
{% for detail in event.events %}
{% if detail.allday %}
<div class='allday' style='background-color:{{ detail.colorday }};' title='{{ detail.descriptionday }}'>1</div>
{% else %}
{%if detail.am %}
{% set haveam=true %}
<div class='am' style='background-color:{{ detail.coloram }};' title='{{ detail.descriptionam }}'>0.5</div>
{% endif %}
{%if event.ap %}
<div class='ap' style='background-color:{{ event.colorap }};' title='{{ event.descriptionap }}'>0.5</div>
{% else %}
<div class='ap'></div>
{% endif %}
{% endif %}
{%if detail.ap %}
{% if not haveam %}<div class='am'></div>{%endif%}
<div class='ap' style='background-color:{{ detail.colorap }};' title='{{ detail.descriptionap }}'>0.5</div>
{% endif %}
{% endif %}
{% endfor %}
</div>
{% if event.astreinte %}
<div class='astreinte' style='background-color:{{ event.colorastreinte }};' title='{{ event.descriptionastreinte }}'>*</div>