Merge branch 'changehourevent' into timetracking

This commit is contained in:
2020-07-30 13:57:18 +02:00
3 changed files with 179 additions and 16 deletions

View File

@@ -99,6 +99,7 @@ class EventController extends AbstractController
$am = ($request->request->get('am')=="true"); $am = ($request->request->get('am')=="true");
$ap = ($request->request->get('ap')=="true"); $ap = ($request->request->get('ap')=="true");
$astreinte = ($request->request->get('astreinte')=="true"); $astreinte = ($request->request->get('astreinte')=="true");
$externaltrip = ($request->request->get('externaltrip')=="true");
$description = $request->request->get('description'); $description = $request->request->get('description');
$user = $em->getRepository("App:User")->find($iduser); $user = $em->getRepository("App:User")->find($iduser);
@@ -242,6 +243,7 @@ class EventController extends AbstractController
$event->setEnd($dateend); $event->setEnd($dateend);
$event->setDuration($duration); $event->setDuration($duration);
$event->setAllday($allday); $event->setAllday($allday);
$event->setExternalTrip($externaltrip);
$event->setDescription($description); $event->setDescription($description);
$event->setUser($user); $event->setUser($user);
$event->setTask($task); $event->setTask($task);
@@ -271,7 +273,10 @@ class EventController extends AbstractController
$idevent = str_replace("A","",$request->request->get('idevent')); $idevent = str_replace("A","",$request->request->get('idevent'));
$iduser = $request->request->get('iduser'); $iduser = $request->request->get('iduser');
$idtask = $request->request->get('idtask'); $idtask = $request->request->get('idtask');
$am = ($request->request->get('am')=="true");
$ap = ($request->request->get('ap')=="true");
$fgastreinte = ($request->request->get('fgastreinte')=="true"); $fgastreinte = ($request->request->get('fgastreinte')=="true");
$externaltrip = ($request->request->get('externaltrip')=="true");
$description = $request->request->get('description'); $description = $request->request->get('description');
$user = $em->getRepository("App:User")->find($iduser); $user = $em->getRepository("App:User")->find($iduser);
@@ -327,8 +332,74 @@ class EventController extends AbstractController
return new Response(json_encode($output)); 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 // Modification de l'évenement
$event->setStart($datestart);
$event->setEnd($dateend);
$event->setDescription($description); $event->setDescription($description);
$event->setDuration($duration);
$event->setAllday($allday);
$event->setExternalTrip($externaltrip);
$event->setUser($user); $event->setUser($user);
$event->setTask($task); $event->setTask($task);
@@ -337,7 +408,6 @@ class EventController extends AbstractController
$output=$this->formatEvent($event); $output=$this->formatEvent($event);
} }
return new Response(json_encode($output)); return new Response(json_encode($output));
} }
@@ -411,6 +481,8 @@ class EventController extends AbstractController
"borderColor" => $event->getTask()->getColor(), "borderColor" => $event->getTask()->getColor(),
"textColor" => "#ffffff", "textColor" => "#ffffff",
"allDay" => $event->getAllday(), "allDay" => $event->getAllday(),
"holiday" => $event->getTask()->getNature()->getIsvacation(),
"externaltrip" => ($event instanceof Penalty?$event->getExternalTrip():false),
"editable" => $editable, "editable" => $editable,
"durationEditable" => false, "durationEditable" => false,
"extendedProps" => [ "extendedProps" => [
@@ -441,6 +513,8 @@ class EventController extends AbstractController
"borderColor" => "#cdcdcd", "borderColor" => "#cdcdcd",
"textColor" => "#ffffff", "textColor" => "#ffffff",
"allDay" => true, "allDay" => true,
"externaltrip" => false,
"holiday" => false,
"editable" => false, "editable" => false,
"durationEditable" => false, "durationEditable" => false,
"extendedProps" => [ "extendedProps" => [

View File

@@ -50,6 +50,12 @@ class Event
*/ */
private $allday; private $allday;
/**
* @ORM\Column(name="externaltrip", type="boolean")
*
*/
private $externaltrip;
/** /**
* @ORM\Column(name="validate", type="boolean") * @ORM\Column(name="validate", type="boolean")
* *
@@ -96,24 +102,24 @@ class Event
public function getStart(): ?\DateTimeInterface public function getStart(): ?\DateTimeInterface
{ {
return $this->start; return clone $this->start;
} }
public function setStart(\DateTimeInterface $start): self public function setStart(\DateTimeInterface $start): self
{ {
$this->start = $start; $this->start = clone $start;
return $this; return $this;
} }
public function getEnd(): ?\DateTimeInterface public function getEnd(): ?\DateTimeInterface
{ {
return $this->end; return clone $this->end;
} }
public function setEnd(\DateTimeInterface $end): self public function setEnd(\DateTimeInterface $end): self
{ {
$this->end = $end; $this->end = clone $end;
return $this; return $this;
} }
@@ -129,6 +135,17 @@ class Event
return $this; return $this;
} }
public function getExternalTrip(): ?bool
{
return $this->externaltrip;
}
public function setExternalTrip(bool $externaltrip): self
{
$this->externaltrip = $externaltrip;
return $this;
}
public function getValidate(): ?bool public function getValidate(): ?bool
{ {

View File

@@ -109,6 +109,12 @@
<label class="custom-control-label" for="astreinte">Astreinte</label> <label class="custom-control-label" for="astreinte">Astreinte</label>
</div> </div>
</div> </div>
<div class="form-group">
<div class="custom-control custom-switch">
<input type="checkbox" class="custom-control-input" id="externaltrip">
<label class="custom-control-label" for="externaltrip">Déplacement externe</label>
</div>
</div>
<div class="form-group"> <div class="form-group">
<label for="description" class="control-label"> <label for="description" class="control-label">
@@ -157,7 +163,6 @@
{% endif %} {% endif %}
</select> </select>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="control-label required" for="taskupdate"> <label class="control-label required" for="taskupdate">
Project<span class="mandatory">*</span> Project<span class="mandatory">*</span>
@@ -169,7 +174,25 @@
{% endfor %} {% endfor %}
</select> </select>
</div> </div>
<div class="form-group">
<div class="custom-control custom-switch">
<input type="checkbox" class="custom-control-input" id="amupdate">
<label class="custom-control-label" for="amupdate">Evènement sur la matinée</label>
</div>
</div>
<div class="form-group">
<div class="custom-control custom-switch">
<input type="checkbox" class="custom-control-input" id="apupdate">
<label class="custom-control-label" for="apupdate">Evènement sur l'après-midi</label>
</div>
</div>
<div class="form-group">
<div class="custom-control custom-switch">
<input type="checkbox" class="custom-control-input" id="externaltripupdate">
<label class="custom-control-label" for="externaltripupdate">Déplacement externe</label>
</div>
</div>
<div class="form-group"> <div class="form-group">
<label for="description" class="control-label"> <label for="description" class="control-label">
Description Description
@@ -230,14 +253,19 @@ function eventRender(info) {
var eventInfo=$(content).children('.eventUser'); var eventInfo=$(content).children('.eventUser');
// Ajout container // Ajout container
content.append("<span class='eventInfo float-right'></span>"); content.append("<span style='margin-top:-12px' class='eventInfo float-right'></span>");
var eventInfo=$(content).children('.eventInfo'); var eventInfo=$(content).children('.eventInfo');
// Ajouter le verrou si event non editable // Ajouter le verrou si event non editable
if(info.event.extendedProps.locked) { if(info.event.extendedProps.locked) {
eventInfo.append("<i class='fa fa-lock float-right'></i>"); eventInfo.append("<i class='fa fa-lock float-right'></i>");
} }
if(info.event.extendedProps.externaltrip) {
eventInfo.append("<i class='fas fa-bed float-right'></i>");
}
if(info.event.extendedProps.holiday) {
eventInfo.append("<i class='fas fa-umbrella-beach float-right'></i>");
}
// Ajout estimation // Ajout estimation
eventInfo.append("<span class='eventEstimate float-right small'>"+info.event.extendedProps.estimate+"</span>"); eventInfo.append("<span class='eventEstimate float-right small'>"+info.event.extendedProps.estimate+"</span>");
@@ -245,7 +273,7 @@ function eventRender(info) {
content.attr("title",info.event.extendedProps.fulldescription); content.attr("title",info.event.extendedProps.fulldescription);
} }
// Formulaire Création d'un évelement // Formulaire Création d'un événement
var allDay; var allDay;
function eventSelect(selectionInfo) { function eventSelect(selectionInfo) {
var start=moment(selectionInfo.start); var start=moment(selectionInfo.start);
@@ -291,6 +319,7 @@ function eventSelect(selectionInfo) {
$('#modalsubmit #end').val(end.format("YYYY-MM-DD")); $('#modalsubmit #end').val(end.format("YYYY-MM-DD"));
$('#modalsubmit #description').val(""); $('#modalsubmit #description').val("");
$('#modalsubmit #externaltrip').prop("checked",false);
$("#modalsubmit .alert").remove(); $("#modalsubmit .alert").remove();
@@ -298,24 +327,64 @@ function eventSelect(selectionInfo) {
$('#modalsubmit').modal(); $('#modalsubmit').modal();
} }
// Formulaire Modification d'un évelement // Formulaire Modification d'un événement
function eventClick(info) { function eventClick(info) {
if(info.event.extendedProps.editable) { if(info.event.extendedProps.editable) {
console.log(info.event.id); console.log(info.event);
var id=info.event.id; var id=info.event.id;
var description=info.event.extendedProps.description; var description=info.event.extendedProps.description;
var userid=info.event.extendedProps.userid; var userid=info.event.extendedProps.userid;
var taskid=info.event.extendedProps.taskid; var taskid=info.event.extendedProps.taskid;
var fgastreinte=info.event.extendedProps.astreinte; var fgastreinte=info.event.extendedProps.astreinte;
var eventallday = info.event.allDay;
var eventstart = info.event.start;
var eventend = info.event.end;
var externaltrip = info.event.extendedProps.externaltrip;
var holiday = info.event.extendedProps.holiday;
$('#userupdate').val(userid).trigger("change"); $('#userupdate').val(userid).trigger("change");
$('#taskupdate').val(taskid).trigger("change"); $('#taskupdate').val(taskid).trigger("change");
$('#modalupdate #idevent').val(id); $('#modalupdate #idevent').val(id);
$('#modalupdate #fgastreinte').val(fgastreinte); $('#modalupdate #fgastreinte').val(fgastreinte);
$('#modalupdate #description').val(description); $('#modalupdate #description').val(description);
if (holiday) {
$('#modalupdate #externaltripupdate').prop("checked",false);
$('#modalupdate #externaltripupdate').prop("disabled",true);
}else{
$('#modalupdate #externaltripupdate').prop("disabled",false);
$('#modalupdate #externaltripupdate').prop("checked",externaltrip);
}
$("#modalupdate .alert").remove(); $("#modalupdate .alert").remove();
eDayStart=eventstart.toString().split(" ")[2]
eDayEnd=eventend.toString().split(" ")[2]
if ((eDayEnd - eDayStart) >1) {
$('#modalupdate #amupdate').prop("checked",true);
$('#modalupdate #apupdate').prop("checked",true);
$('#modalupdate #amupdate').prop("disabled",true);
$('#modalupdate #apupdate').prop("disabled",true);
}else{
$('#modalupdate #amupdate').prop("disabled",false);
$('#modalupdate #apupdate').prop("disabled",false);
if (!eventallday){
eStart = eventstart.toString().split(" ")[4].split(":")[0]
//eEnd = eventend.toString().split(" ")[4].split(":")[0]
//AM
if (eStart == 09){
$('#modalupdate #amupdate').prop("checked",true);
$('#modalupdate #apupdate').prop("checked",false);
}
//AP
if (eStart == 13){
$('#modalupdate #amupdate').prop("checked",false);
$('#modalupdate #apupdate').prop("checked",true);
}
}else{
$('#modalupdate #amupdate').prop("checked",true);
$('#modalupdate #apupdate').prop("checked",true);
}
}
// Formulaire de création d'un évènement // Formulaire de création d'un évènement
$('#modalupdate').modal(); $('#modalupdate').modal();
@@ -350,6 +419,7 @@ function eventSubmit() {
am: $("#modalsubmit #amsubmit").prop("checked"), am: $("#modalsubmit #amsubmit").prop("checked"),
ap: $("#modalsubmit #apsubmit").prop("checked"), ap: $("#modalsubmit #apsubmit").prop("checked"),
astreinte: $("#modalsubmit #astreinte").prop("checked"), astreinte: $("#modalsubmit #astreinte").prop("checked"),
externaltrip: $("#modalsubmit #externaltrip").prop("checked"),
description: $("#modalsubmit #description").val() description: $("#modalsubmit #description").val()
}, },
url: "{{ path('app_event_submit') }}", url: "{{ path('app_event_submit') }}",
@@ -378,7 +448,10 @@ function eventUpdate() {
idevent: $("#modalupdate #idevent").val(), idevent: $("#modalupdate #idevent").val(),
iduser: $("#userupdate").val(), iduser: $("#userupdate").val(),
idtask: $("#taskupdate").val(), idtask: $("#taskupdate").val(),
am: $("#modalupdate #amupdate").prop("checked"),
ap: $("#modalupdate #apupdate").prop("checked"),
fgastreinte: $("#modalupdate #fgastreinte").val(), fgastreinte: $("#modalupdate #fgastreinte").val(),
externaltrip: $("#modalupdate #externaltripupdate").prop("checked"),
description: $("#modalupdate #description").val() description: $("#modalupdate #description").val()
}, },
url: "{{ path('app_event_update') }}", url: "{{ path('app_event_update') }}",
@@ -426,7 +499,6 @@ function eventDelete() {
// On change astreinte // On change astreinte
$("#astreinte").change(function() { $("#astreinte").change(function() {
console.log(allDay)
if(this.checked) { if(this.checked) {
$("#amsubmit").prop("disabled",true); $("#amsubmit").prop("disabled",true);
$("#apsubmit").prop("disabled",true); $("#apsubmit").prop("disabled",true);