Files
schedule/src/schedule-2.0/src/Controller/ExportController.php

436 lines
22 KiB
PHP

<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Doctrine\ORM\EntityManagerInterface;
class ExportController extends AbstractController
{
private $data = "export";
private $route = "app_exportèview";
private $render = "Export/";
private $entity = "App:Export";
public function view(Request $request)
{
$em = $this->getDoctrine()->getManager();
$iduser = $this->get("session")->get("iduser");
$user = $em->getRepository("App:User")->find($iduser);
return $this->render($this->render.'list.html.twig',[
"useheader" => true,
"usesidebar" => true,
"user" => $user,
]);
}
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");
$timers = $em->getRepository("App:Timer")->findBy(["user"=>$iduser]);
$tbtimers = [];
foreach ($timers as $timer) {
$isactive = $timer->getActivePenalty();
$isadditional = $timer->getAdditionalHour();
if ($isactive || $isadditional) {
$tbtimer["id"] = $timer->getId();
$tbtimer["taskname"] = $timer->getTask()->getDisplayname();
$tbtimer["user"] = $timer->getUser()->getUsername();
$tbtimer["start"] = $timer->getStart()->format("Y-m-d H:i");
$tbtimer["end"] = $timer->getEnd()->format("Y-m-d H:i");
$tbtimer["duration"] = $timer->getDuration();
$tbtimer["activepenalty"] = $timer->getActivePenalty();
$tbtimer["additionalhour"] = $timer->getAdditionalHour();
$tbtimer["description"] = $timer->getDescription();
array_push($tbtimers, $tbtimer);
}
}
$csv = $this->renderView('Export/export_penalty_additional.csv.twig', ["timers" => $tbtimers]);
$response = new Response($csv);
$response->headers->set('Content-Type', 'text/csv; charset=utf-8');
$response->headers->set('Content-Disposition', 'attachment; filename="export_penalty_additional.csv"');
return $response;
}
public function export_project_weekly(Request $request,$access=null): Response {
$nbmonth=$this->get("session")->get("nbmonth");
$em = $this->getDoctrine()->getManager();
$projects=$em->getRepository("App:Project")->findAll();
//Construction du tableau des projets
$tbprojects=[];
foreach($projects as $project) {
// Filtre par Customer
if($access=="customer") {
if($project->getCustomer()->getKeypass()!=$key)
continue;
}
// Filtre par Service
if($this->get('session')->get('idservice')!="all") {
if($project->getService()->getId()!=$this->get('session')->get('idservice'))
continue;
}
// Filtre par project
if($this->get('session')->get('idproject')!="all") {
if($project->getId()!=$this->get('session')->get('idproject'))
continue;
}
// Ne prendre que les projets actif/inactif
if($this->get('session')->get('activeproject')!=$project->getActive())
continue;
$tbproject= [];
$tbproject["projectname"] = $project->getDisplayname();
$tbproject["name"] = $project->getname();
$tbproject["customer"] = $project->getCustomer()->getName();
// Somme event validé par semaine
$start=new \Datetime('first day of this month');
$start->sub(new \DateInterval('P'.$nbmonth.'M'));
$start->modify('previous monday');
$start->setTime(0,0,0);
$endmonth = new \Datetime('first day of this month');
$endmonth->add(new \DateInterval('P1M'));
$endmonth->modify('next monday');
$endmonth->setTime(23,59,0);
$eventsbyweek = $em
->createQueryBuilder('event')
->select('event')
->from('App:Task','task')
->from('App:Event','event')
->Where('task.project=:project')
->andWhere('event.task=task')
->andWhere('event.end >=:start')
->andWhere('event.end <:end')
->andWhere('event.validate=:validate')
->setParameter('project',$project)
->setParameter('validate',true)
->setParameter('start',$start)
->setParameter('end',$endmonth)
->orderBy('event.start')
->getQuery()->getResult();
// foreach($eventsbyweek as $event) {
// if(!isset($tbproject["weeks"][$event->getStart()->format("Y")][$event->getStart()->format("W")])){
// $tbproject["weeks"][$event->getStart()->format("Y")][$event->getStart()->format("W")] = [
// "weeknumber" => $event->getStart()->format("W"),
// "cumul" => 0,
// ];
// }
// $tbproject["weeks"][$event->getStart()->format("Y")][$event->getStart()->format("W")]["cumul"] = $tbproject["weeks"][$event->getStart()->format("Y")][$event->getStart()->format("W")]["cumul"]+$event->getDuration();
// }
// foreach($eventsbyweek as $event) {
// if(!isset($tbproject["weeks_by_name"][$event->getStart()->format("Y")][$event->getStart()->format("W")]["users"])){
// $tbproject["weeks_by_name"][$event->getStart()->format("Y")][$event->getStart()->format("W")] = [
// "weeknumber" => $event->getStart()->format("W"),
// "users" => [],
// ];
// }
// if(!isset($tbproject["weeks_by_name"][$event->getStart()->format("Y")][$event->getStart()->format("W")]["users"][$event->getUser()->getId()])){
// $tbuser= [
// "id"=>$event->getUser()->getId(),
// "displayname"=>$event->getUser()->getDisplayname(),
// "cumul"=>0
// ];
// $tbproject["weeks_by_name"][$event->getStart()->format("Y")][$event->getStart()->format("W")]["users"][$event->getUser()->getId()] = $tbuser;
// }
// $tbproject["weeks_by_name"][$event->getStart()->format("Y")][$event->getStart()->format("W")]["users"][$event->getUser()->getId()]["cumul"] = $tbproject["weeks_by_name"][$event->getStart()->format("Y")][$event->getStart()->format("W")]["users"][$event->getUser()->getId()]["cumul"]+$event->getDuration();
// }
foreach($eventsbyweek as $event) {
if(!isset($tbproject["weeks_by_task_by_user"][$event->getStart()->format("Y")][$event->getStart()->format("W")]["tasks"])){
$tbproject["weeks_by_task_by_user"][$event->getStart()->format("Y")][$event->getStart()->format("W")] = [
"weeknumber" => $event->getStart()->format("W"),
"tasks" => [],
];
}
if(!isset($tbproject["weeks_by_task_by_user"][$event->getStart()->format("Y")][$event->getStart()->format("W")]["tasks"][$event->getTask()->getId()])){
$tbproject["weeks_by_task_by_user"][$event->getStart()->format("Y")][$event->getStart()->format("W")]["tasks"][$event->getTask()->getId()] = [
"taskname" => $event->getTask()->getName(),
"users" => [],
];
}
if(!isset($tbproject["weeks_by_task_by_user"][$event->getStart()->format("Y")][$event->getStart()->format("W")]["tasks"][$event->getTask()->getId()]["users"][$event->getUser()->getId()])){
$tbuser= [
"id"=>$event->getUser()->getId(),
"displayname"=>$event->getUser()->getDisplayname(),
"cumul"=>0
];
$tbproject["weeks_by_task_by_user"][$event->getStart()->format("Y")][$event->getStart()->format("W")]["tasks"][$event->getTask()->getId()]["users"][$event->getUser()->getId()] = $tbuser;
}
$tbproject["weeks_by_task_by_user"][$event->getStart()->format("Y")][$event->getStart()->format("W")]["tasks"][$event->getTask()->getId()]["users"][$event->getUser()->getId()]["cumul"] = $tbproject["weeks_by_task_by_user"][$event->getStart()->format("Y")][$event->getStart()->format("W")]["tasks"][$event->getTask()->getId()]["users"][$event->getUser()->getId()]["cumul"]+$event->getDuration();
}
// Somme astreintes validé par semaine
$start=new \Datetime('first day of this month');
$start->sub(new \DateInterval('P'.$nbmonth.'M'));
$start->modify('previous monday');
$start->setTime(0,0,0);
$endmonth = new \Datetime('first day of this month');
$endmonth->add(new \DateInterval('P1M'));
$endmonth->modify('next monday');
$endmonth->setTime(23,59,0);
$penaltybyweek = $em
->createQueryBuilder('penalty')
->select('penalty')
->from('App:Task','task')
->from('App:Penalty','penalty')
->Where('task.project=:project')
->andWhere('penalty.task=task')
->andWhere('penalty.end >=:start')
->andWhere('penalty.end <:end')
->andWhere('penalty.validate=:validate')
->setParameter('project',$project)
->setParameter('validate',true)
->setParameter('start',$start)
->setParameter('end',$endmonth)
->orderBy('penalty.start')
->getQuery()->getResult();
// foreach($penaltybyweek as $penalty) {
// if(!isset($tbproject["weeks"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("W")])){
// $tbproject["weeks"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("W")] = [
// "weeknumber" => $penalty->getStart()->format("W"),
// "cumul" => 0,
// ];
// }
// $tbproject["weeks"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("W")]["cumul"] = $tbproject["weeks"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("W")]["cumul"]+$penalty->getDuration();
// }
// foreach($penaltybyweek as $penalty) {
// if(!isset($tbproject["weeks_by_name"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("W")]["users"])){
// $tbproject["weeks_by_name"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("W")] = [
// "weeknumber" => $penalty->getStart()->format("W"),
// "users" => [],
// ];
// }
// if(!isset($tbproject["weeks_by_name"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("W")]["users"][$penalty->getUser()->getId()])){
// $tbuser= [
// "id"=>$penalty->getUser()->getId(),
// "displayname"=>$penalty->getUser()->getDisplayname(),
// "cumul"=>0
// ];
// $tbproject["weeks_by_name"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("W")]["users"][$penalty->getUser()->getId()] = $tbuser;
// }
// $tbproject["weeks_by_name"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("W")]["users"][$penalty->getUser()->getId()]["cumul"] = $tbproject["weeks_by_name"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("W")]["users"][$penalty->getUser()->getId()]["cumul"]+$penalty->getDuration();
// }
foreach($penaltybyweek as $penalty) {
if(!isset($tbproject["weeks_by_task_by_user"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("W")]["tasks"])){
$tbproject["weeks_by_task_by_user"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("W")] = [
"weeknumber" => $penalty->getStart()->format("W"),
"tasks" => [],
];
}
if(!isset($tbproject["weeks_by_task_by_user"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("W")]["tasks"][$penalty->getTask()->getId()])){
$tbproject["weeks_by_task_by_user"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("W")]["tasks"][$penalty->getTask()->getId()] = [
"taskname" => $penalty->getTask()->getName(),
"users" => [],
];
}
if(!isset($tbproject["weeks_by_task_by_user"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("W")]["tasks"][$penalty->getTask()->getId()]["users"][$penalty->getUser()->getId()])){
$tbuser= [
"id"=>$penalty->getUser()->getId(),
"displayname"=>$penalty->getUser()->getDisplayname(),
"cumul"=>0
];
$tbproject["weeks_by_task_by_user"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("W")]["tasks"][$penalty->getTask()->getId()]["users"][$penalty->getUser()->getId()] = $tbuser;
}
$tbproject["weeks_by_task_by_user"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("W")]["tasks"][$penalty->getTask()->getId()]["users"][$penalty->getUser()->getId()]["cumul"] = $tbproject["weeks_by_task_by_user"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("W")]["tasks"][$penalty->getTask()->getId()]["users"][$penalty->getUser()->getId()]["cumul"]+$penalty->getDuration();
}
$tbprojects[$project->getId()]=$tbproject;
}
$csv = $this->renderView('Export/export_project_weekly.csv.twig', ["projects" => $tbprojects]);
$response = new Response($csv);
$response->headers->set('Content-Type', 'text/csv; charset=utf-8');
$response->headers->set('Content-Disposition', 'attachment; filename="export_project_weekly.csv"');
return $response;
}
}