Ajout d'un export csv hebdomadaire sur les rapports
This commit is contained in:
@@ -288,6 +288,10 @@ app_report:
|
||||
path: /user/report
|
||||
defaults: { _controller: App\Controller\ReportController:report }
|
||||
|
||||
app_report_export:
|
||||
path: /user/report/export
|
||||
defaults: { _controller: App\Controller\ReportController:export }
|
||||
|
||||
app_holiday:
|
||||
path: /user/holiday
|
||||
defaults: { _controller: App\Controller\ReportController:holiday }
|
||||
|
@@ -6,6 +6,7 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Knp\Bundle\SnappyBundle\Snappy\Response\PdfResponse;
|
||||
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
|
||||
|
||||
class ReportController extends AbstractController
|
||||
{
|
||||
@@ -15,7 +16,6 @@ class ReportController extends AbstractController
|
||||
public function synthese(Request $request)
|
||||
{
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
|
||||
$nbmonth=$this->get("session")->get("nbmonth");
|
||||
$iduser=$this->get("session")->get("iduser");
|
||||
|
||||
@@ -1031,10 +1031,88 @@ class ReportController extends AbstractController
|
||||
"usesidebar" => ($this->getUser()),
|
||||
"users" => $tbevents
|
||||
]);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public function export(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();
|
||||
// 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');
|
||||
|
||||
$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();
|
||||
|
||||
}
|
||||
$tbprojects[$project->getId()]=$tbproject;
|
||||
}
|
||||
|
||||
$csv = $this->renderView('Report/export.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.csv"');
|
||||
|
||||
return $response;
|
||||
}
|
||||
|
||||
public function activeholiday() {
|
||||
$this->get('session')->set('activeholiday',!$this->get('session')->get('activeholiday'));
|
||||
|
||||
@@ -1065,3 +1143,4 @@ class ReportController extends AbstractController
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
15
src/schedule-2.0/templates/Report/export.csv.twig
Normal file
15
src/schedule-2.0/templates/Report/export.csv.twig
Normal file
@@ -0,0 +1,15 @@
|
||||
{% block body %}
|
||||
{% for project in projects %}
|
||||
{{ project.projectname|raw }}
|
||||
{% for years in project %}
|
||||
{% for year,weeks in years %}
|
||||
{{year}}
|
||||
;{% for week in weeks %}S{{week.weeknumber}};{% endfor %}
|
||||
|
||||
;{% for week in weeks %}{{week.cumul}};{% endfor %}
|
||||
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
|
||||
{% endfor %}
|
||||
{% endblock %}
|
@@ -93,7 +93,6 @@
|
||||
|
||||
{% block body %}
|
||||
{% if fgprint is defined and fgprint %}<h1>Planning</h1>{%endif%}
|
||||
|
||||
{% if access=="customer" and not app.user %}
|
||||
<div class="no-print" style="margin-top:10px;">
|
||||
<style> .select2-container { display:inline-block} </style>
|
||||
@@ -112,6 +111,13 @@
|
||||
</select>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if access!="customer" and app.user %}
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<a href="{{ path('app_report_export') }}" class="btn btn-success">Exporter2</a>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% for project in projects %}
|
||||
{% if not project.months is empty or project.hors!=0 or not project.before is empty or not project.beforeastreinte is empty %}
|
||||
<div class="card">
|
||||
|
Reference in New Issue
Block a user