export journée pleines travaillés
This commit is contained in:
@@ -412,6 +412,10 @@ export_project_weekly:
|
||||
path: /export/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 ===========================================================================================================
|
||||
app_api:
|
||||
|
@@ -48,7 +48,6 @@ class EventController extends AbstractController
|
||||
if($iduser=="all")
|
||||
$events=$em->getRepository("App:Event")->findAll();
|
||||
else {
|
||||
$iduser=$this->get("session")->get("iduser");
|
||||
$user=$em->getRepository("App:User")->find($iduser);
|
||||
$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
|
||||
{
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
|
||||
$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]);
|
||||
$tbtimers = [];
|
||||
foreach ($timers as $timer) {
|
||||
@@ -101,7 +262,7 @@ class ExportController extends AbstractController
|
||||
$tbproject["projectname"] = $project->getDisplayname();
|
||||
$tbproject["name"] = $project->getname();
|
||||
$tbproject["customer"] = $project->getCustomer()->getName();
|
||||
// Somme event validé par semaine
|
||||
// Somme event validé par semaine
|
||||
$start=new \Datetime('first day of this month');
|
||||
$start->sub(new \DateInterval('P'.$nbmonth.'M'));
|
||||
$start->modify('previous monday');
|
||||
|
@@ -122,6 +122,7 @@ class ReportController extends AbstractController
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// On formate le tableau des astreintes
|
||||
$start=new \Datetime('first day of this month');
|
||||
$start->modify('last Monday');
|
||||
@@ -205,6 +206,7 @@ class ReportController extends AbstractController
|
||||
);
|
||||
}
|
||||
else {
|
||||
|
||||
return $this->render('Report/synthese.html.twig',[
|
||||
"useheader" => true,
|
||||
"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 %}
|
||||
Client;Projet;Tâche;Utilisateur;Année;Semaine;Cumul;
|
||||
{% for project in projects %}
|
||||
{% if project.weeks_by_task_by_user is defined %}
|
||||
{% for year,weeks in project.weeks_by_task_by_user %}
|
||||
{% for week in weeks %}
|
||||
{% for task in week.tasks%}
|
||||
@@ -10,5 +11,6 @@ Client;Projet;Tâche;Utilisateur;Année;Semaine;Cumul;
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endblock %}
|
@@ -5,10 +5,11 @@ EXPORTS DE DONNEES
|
||||
</h1>
|
||||
<div class="card">
|
||||
<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 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>
|
||||
<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>
|
||||
</div>
|
||||
<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>
|
||||
<p></p>
|
||||
|
Reference in New Issue
Block a user