export journée pleines travaillés
This commit is contained in:
@@ -412,6 +412,10 @@ export_project_weekly:
|
|||||||
path: /export/export_project_weekly
|
path: /export/export_project_weekly
|
||||||
defaults: { _controller: App\Controller\ExportController:export_project_weekly }
|
defaults: { _controller: App\Controller\ExportController:export_project_weekly }
|
||||||
|
|
||||||
|
export_full_worked_days:
|
||||||
|
path: /export/export_full_worked_days
|
||||||
|
defaults: { _controller: App\Controller\ExportController:export_full_worked_days }
|
||||||
|
|
||||||
|
|
||||||
#== API ===========================================================================================================
|
#== API ===========================================================================================================
|
||||||
app_api:
|
app_api:
|
||||||
|
@@ -48,7 +48,6 @@ class EventController extends AbstractController
|
|||||||
if($iduser=="all")
|
if($iduser=="all")
|
||||||
$events=$em->getRepository("App:Event")->findAll();
|
$events=$em->getRepository("App:Event")->findAll();
|
||||||
else {
|
else {
|
||||||
$iduser=$this->get("session")->get("iduser");
|
|
||||||
$user=$em->getRepository("App:User")->find($iduser);
|
$user=$em->getRepository("App:User")->find($iduser);
|
||||||
$events=$em->getRepository("App:Event")->findBy(["user"=>$user]);
|
$events=$em->getRepository("App:Event")->findBy(["user"=>$user]);
|
||||||
}
|
}
|
||||||
|
@@ -31,14 +31,175 @@ class ExportController extends AbstractController
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function export_full_worked_days(Request $request,$access=null): Response
|
||||||
|
{
|
||||||
|
$em = $this->getDoctrine()->getManager();
|
||||||
|
$nbmonth=$this->get("session")->get("nbmonth");
|
||||||
|
$iduser=$this->get("session")->get("iduser");
|
||||||
|
|
||||||
|
if($iduser=="all") {
|
||||||
|
$users=$em->getRepository("App:User")->findAll();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$users=$em->getRepository("App:User")->findBy(["id"=>$iduser]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$tbevents=[];
|
||||||
|
foreach($users as $user) {
|
||||||
|
if(in_array("ROLE_USER",$user->getRoles())) {
|
||||||
|
// Filtre par Service
|
||||||
|
if($this->get('session')->get('idservice')!="all") {
|
||||||
|
if($user->getService()->getId()!=$this->get('session')->get('idservice'))
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$tmp=[
|
||||||
|
"id" => $user->getId(),
|
||||||
|
"user" => $user,
|
||||||
|
"events" => [],
|
||||||
|
];
|
||||||
|
|
||||||
|
// On formate le tableau de jour
|
||||||
|
$start=new \Datetime('first day of this month');
|
||||||
|
$start->sub(new \DateInterval('P'.$nbmonth.'M'));
|
||||||
|
$start->modify('previous monday');
|
||||||
|
$start->setTime(0,0,0);
|
||||||
|
$end = new \Datetime('first day of this month');
|
||||||
|
$end->add(new \DateInterval('P1M'));
|
||||||
|
$end->modify('next monday');
|
||||||
|
$end->setTime(23,59,0);
|
||||||
|
while($start<$end) {
|
||||||
|
$idday=$start->format("Ymd");
|
||||||
|
$idmonth=$start->format("Ym");
|
||||||
|
|
||||||
|
$tmp["events"][$idday] = [
|
||||||
|
"date"=>clone $start,
|
||||||
|
"allday"=>false,
|
||||||
|
"descriptionday"=>"",
|
||||||
|
"am"=>false,
|
||||||
|
"descriptionam"=>"",
|
||||||
|
"ap"=>false,
|
||||||
|
"descriptionap"=>"",
|
||||||
|
"astreinte"=>false,
|
||||||
|
"descriptionastreinte"=>"",
|
||||||
|
];
|
||||||
|
|
||||||
|
$start->add(new \DateInterval('P1D'));
|
||||||
|
}
|
||||||
|
|
||||||
|
// On formate le tableau des event
|
||||||
|
$start=new \Datetime('first day of this month');
|
||||||
|
$start->sub(new \DateInterval('P'.$nbmonth.'M'));
|
||||||
|
$start->modify('previous monday');
|
||||||
|
$start->setTime(0,0,0);
|
||||||
|
$end = new \Datetime('first day of this month');
|
||||||
|
$end->add(new \DateInterval('P1M'));
|
||||||
|
$end->modify('next monday');
|
||||||
|
$end->setTime(23,59,0);
|
||||||
|
|
||||||
|
$events = $em
|
||||||
|
->createQueryBuilder('event')
|
||||||
|
->select('event')
|
||||||
|
->from('App:Event','event')
|
||||||
|
->Where('event.user=:user AND event.start>=:start AND event.end <:end')
|
||||||
|
->setParameter('user',$user->getId())
|
||||||
|
->setParameter('start',$start)
|
||||||
|
->setParameter('end',$end)
|
||||||
|
->getQuery()->getResult();
|
||||||
|
foreach($events as $event) {
|
||||||
|
$idproject=$event->getTask()->getProject()->getId();
|
||||||
|
|
||||||
|
// Filtre par project
|
||||||
|
if($this->get('session')->get('idproject')!="all") {
|
||||||
|
if($idproject!=$this->get('session')->get('idproject'))
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$isvac= $event->getTask()->getNature()->getIsvacation();
|
||||||
|
if($isvac) {continue;}
|
||||||
|
$st=clone $event->getStart();
|
||||||
|
while($st<$event->getEnd()) {
|
||||||
|
|
||||||
|
$idday=$st->format("Ymd");
|
||||||
|
if($event->getAllday()) {
|
||||||
|
$tmp["events"][$idday]["allday"]=true;
|
||||||
|
$tmp["events"][$idday]["descriptionday"]=strtoupper($event->getTask()->getDisplayname());
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// Matin ou après-midi ?
|
||||||
|
$time=$event->getStart()->format("H");
|
||||||
|
if($time==9) {
|
||||||
|
$tmp["events"][$idday]["am"]=true;
|
||||||
|
if(isset($tmp["events"][$idday]["ap"]) && $tmp["events"][$idday]["ap"]==true){$tmp["events"][$idday]["allday"]=true;}
|
||||||
|
$tmp["events"][$idday]["descriptionam"]=strtoupper($event->getTask()->getDisplayname());
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$tmp["events"][$idday]["ap"]=true;
|
||||||
|
if(isset($tmp["events"][$idday]["am"]) && $tmp["events"][$idday]["am"] ==true){$tmp["events"][$idday]["allday"]=true;}
|
||||||
|
$tmp["events"][$idday]["descriptionap"]=strtoupper($event->getTask()->getDisplayname());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$st->add(new \DateInterval('P1D'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// On formate le tableau des astreintes
|
||||||
|
$start=new \Datetime('first day of this month');
|
||||||
|
$start->sub(new \DateInterval('P'.$nbmonth.'M'));
|
||||||
|
$start->modify('previous monday');
|
||||||
|
$start->setTime(0,0,0);
|
||||||
|
$end = new \Datetime('first day of this month');
|
||||||
|
$end->add(new \DateInterval('P1M'));
|
||||||
|
$end->modify('next monday');
|
||||||
|
$end->setTime(23,59,0);
|
||||||
|
|
||||||
|
$penaltys = $em
|
||||||
|
->createQueryBuilder('penalty')
|
||||||
|
->select('penalty')
|
||||||
|
->from('App:Penalty','penalty')
|
||||||
|
->Where('penalty.user=:user AND penalty.start>=:start AND penalty.end <:end')
|
||||||
|
->setParameter('user',$user->getId())
|
||||||
|
->setParameter('start',$start)
|
||||||
|
->setParameter('end',$end)
|
||||||
|
->getQuery()->getResult();
|
||||||
|
foreach($penaltys as $penalty) {
|
||||||
|
$idproject=$penalty->getTask()->getProject()->getId();
|
||||||
|
|
||||||
|
// Filtre par project
|
||||||
|
if($this->get('session')->get('idproject')!="all") {
|
||||||
|
if($idproject!=$this->get('session')->get('idproject'))
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$st=clone $penalty->getStart();
|
||||||
|
while($st<$penalty->getEnd()) {
|
||||||
|
$idday=$st->format("Ymd");
|
||||||
|
if($penalty->getAllday()) {
|
||||||
|
$tmp["events"][$idday]["astreinte"]=true;
|
||||||
|
$tmp["events"][$idday]["descriptionastreinte"]=strtoupper($penalty->getTask()->getDisplayname());
|
||||||
|
}
|
||||||
|
|
||||||
|
$st->add(new \DateInterval('P1D'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
array_push($tbevents,$tmp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$csv = $this->renderView('Export/export_full_worked_days.csv.twig', ["users" => $tbevents]);
|
||||||
|
$response = new Response($csv);
|
||||||
|
$response->headers->set('Content-Type', 'text/csv; charset=utf-8');
|
||||||
|
$response->headers->set('Content-Disposition', 'attachment; filename="export_full_worked_days.csv"');
|
||||||
|
|
||||||
|
return $response;
|
||||||
|
}
|
||||||
|
|
||||||
public function export_penalty_additional(Request $request,$access=null): Response
|
public function export_penalty_additional(Request $request,$access=null): Response
|
||||||
{
|
{
|
||||||
$em = $this->getDoctrine()->getManager();
|
$em = $this->getDoctrine()->getManager();
|
||||||
|
|
||||||
$iduser = $this->get("session")->get("iduser");
|
$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]);
|
$timers = $em->getRepository("App:Timer")->findBy(["user"=>$iduser]);
|
||||||
$tbtimers = [];
|
$tbtimers = [];
|
||||||
foreach ($timers as $timer) {
|
foreach ($timers as $timer) {
|
||||||
|
@@ -122,6 +122,7 @@ class ReportController extends AbstractController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// On formate le tableau des astreintes
|
// On formate le tableau des astreintes
|
||||||
$start=new \Datetime('first day of this month');
|
$start=new \Datetime('first day of this month');
|
||||||
$start->modify('last Monday');
|
$start->modify('last Monday');
|
||||||
@@ -205,6 +206,7 @@ class ReportController extends AbstractController
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
||||||
return $this->render('Report/synthese.html.twig',[
|
return $this->render('Report/synthese.html.twig',[
|
||||||
"useheader" => true,
|
"useheader" => true,
|
||||||
"usesidebar" => ($this->getUser()),
|
"usesidebar" => ($this->getUser()),
|
||||||
|
@@ -0,0 +1,8 @@
|
|||||||
|
{% block body %}
|
||||||
|
Utilisateur;Jour;Journée entière;Astreinte;AM;AP;Taches;AM;Tache AM;AP;Tache AP;Astreinte;Description Astreintes
|
||||||
|
{% for user in users %}
|
||||||
|
{% for day, event in user.events %}
|
||||||
|
{{ user.user.displayname }};{{day}};{{event.allday}};{{event.astreinte}};{{event.am}};{{event.ap}};{{event.descriptionday|trim}} {{event.descriptionam|trim}} {{event.descriptionap|trim}} {{event.descriptionastreinte|trim}}
|
||||||
|
{% endfor %}
|
||||||
|
{% endfor %}
|
||||||
|
{% endblock %}
|
@@ -1,6 +1,7 @@
|
|||||||
{% block body %}
|
{% block body %}
|
||||||
Client;Projet;Tâche;Utilisateur;Année;Semaine;Cumul;
|
Client;Projet;Tâche;Utilisateur;Année;Semaine;Cumul;
|
||||||
{% for project in projects %}
|
{% for project in projects %}
|
||||||
|
{% if project.weeks_by_task_by_user is defined %}
|
||||||
{% for year,weeks in project.weeks_by_task_by_user %}
|
{% for year,weeks in project.weeks_by_task_by_user %}
|
||||||
{% for week in weeks %}
|
{% for week in weeks %}
|
||||||
{% for task in week.tasks%}
|
{% for task in week.tasks%}
|
||||||
@@ -10,5 +11,6 @@ Client;Projet;Tâche;Utilisateur;Année;Semaine;Cumul;
|
|||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endblock %}
|
{% endblock %}
|
@@ -5,10 +5,11 @@ EXPORTS DE DONNEES
|
|||||||
</h1>
|
</h1>
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<a href="{{ path('app_export_penalty_additional') }}" class="btn btn-success">Export des Projets par semaine par participant</a>
|
<a href="{{ path('export_project_weekly') }}" class="btn btn-success">Export des Projets par semaine par participant</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
Exporter le cumul des points éffectués sur un projet, par tâche par utilisateur.
|
Exporter le cumul des points éffectués sur un/des projets, par tâche par utilisateur.
|
||||||
|
Filtres utiles : Nombres de mois, Intervenant, Projet, Service
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<p></p>
|
<p></p>
|
||||||
@@ -17,7 +18,18 @@ EXPORTS DE DONNEES
|
|||||||
<a class="btn btn-success" href={{ path('app_export_penalty_additional') }}>Export des astreintes actives et heures supplémentaires</a>
|
<a class="btn btn-success" href={{ path('app_export_penalty_additional') }}>Export des astreintes actives et heures supplémentaires</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
Exporter la liste des astreintes actives réalisés, ainsi que les saisies en heure supplémentaires
|
Exporter la liste des astreintes actives réalisés, ainsi que les saisies en heure supplémentaires.
|
||||||
|
Filtres utiles : Intervenant
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p></p>
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-header">
|
||||||
|
<a class="btn btn-success" href={{ path('export_full_worked_days') }}>Export des jours pleins travaillés</a>
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
Exporter la liste des jours travaillés pleinement éligibles aux tickets restaurants
|
||||||
|
Filtres utiles : Nombre de mois, Intervenant
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<p></p>
|
<p></p>
|
||||||
|
Reference in New Issue
Block a user