diff --git a/src/schedule-2.0/config/routes.yaml b/src/schedule-2.0/config/routes.yaml index 870f7b1..bde9a61 100644 --- a/src/schedule-2.0/config/routes.yaml +++ b/src/schedule-2.0/config/routes.yaml @@ -428,6 +428,10 @@ export_offers: path: /export/export_offers defaults: { _controller: App\Controller\ExportController:export_offers } +export_month_charged_days: + path: /export/export_month_charged_days + defaults: { _controller: App\Controller\ExportController:export_month_charged_days } + #== Export ====================================================================================================== app_stat_view: diff --git a/src/schedule-2.0/scripts/migration/migration.php b/src/schedule-2.0/scripts/migration/migration.php index 17ae0d2..dd95208 100644 --- a/src/schedule-2.0/scripts/migration/migration.php +++ b/src/schedule-2.0/scripts/migration/migration.php @@ -174,10 +174,10 @@ while($row=$queryold->fetch()) { $nature=$row["task_nature"]; if($row["task_id"]<=-70) $nature=-200; if($row["task_id"]==-85 || $row["task_id"]==-70) $nature=-190; - $q="INSERT IGNORE INTO task (id, name, color, quantity, validate, project_id, nature_id ) VALUES (?,?,?,?,?,?,?)"; + $q="INSERT IGNORE INTO task (id, name, color, quantity, validate, project_id, nature_id, active) VALUES (?,?,?,?,?,?,?,?)"; $quantity=($row["task_quantity"]==0?null:$row["task_quantity"]); $query=$bddnew->prepare($q); - $query->execute([$row["task_id"],$row["task_name"],"#".$row["task_color"],$quantity,$row["task_validate"],$row["task_project"],$nature ]); + $query->execute([$row["task_id"],$row["task_name"],"#".$row["task_color"],$quantity,$row["task_validate"],$row["task_project"],$nature, 1]); } writeligne(""); diff --git a/src/schedule-2.0/src/Controller/ExportController.php b/src/schedule-2.0/src/Controller/ExportController.php index c5958ab..58d6e54 100644 --- a/src/schedule-2.0/src/Controller/ExportController.php +++ b/src/schedule-2.0/src/Controller/ExportController.php @@ -473,5 +473,58 @@ class ExportController extends AbstractController return $response; } + public function export_month_charged_days(Request $request,$access=null): Response { + $em = $this->getDoctrine()->getManager(); + $nbmonth=$this->get("session")->get("nbmonth"); + + $tbevents=[]; + // On formate le tableau des event + $start=new \Datetime('first day of this month'); + $start->sub(new \DateInterval('P'.$nbmonth.'M')); + $start->setTime(0,0,0); + $end = new \Datetime('first day of this month'); + $end->add(new \DateInterval('P1M')); + $end->setTime(23,59,0); + + $events = $em + ->createQueryBuilder('event') + ->select('event') + ->from('App:Event','event') + ->Where('event.start>=:start AND event.end <:end') + ->setParameter('start',$start) + ->setParameter('end',$end) + ->getQuery()->getResult(); + + foreach($events as $event) { + if (!isset($tbevents[$event->getStart()->format("m")])) { + $tbevents[$event->getStart()->format("m")]["f"]=0; + $tbevents[$event->getStart()->format("m")]["nf"]=0; + } + if ($event->getTask()->getNature()->getName() == "Prestation") { + if (!isset($tbevents[$event->getStart()->format("m")])){ + + $tbevents[$event->getStart()->format("m")]['f'] = $event->getDuration(); + }else{ + $tbevents[$event->getStart()->format("m")]['f'] += $event->getDuration(); + } + } + + if ($event->getTask()->getNature()->getName() != "Prestation") { + if (!isset($tbevents[$event->getStart()->format("m")])){ + $tbevents[$event->getStart()->format("m")]['nf'] = $event->getDuration(); + }else{ + $tbevents[$event->getStart()->format("m")]['nf'] += $event->getDuration(); + } + } + + } + + $csv = $this->renderView('Export/export_month_charged_days.csv.twig', ["events" => $tbevents]); + $response = new Response($csv); + $response->headers->set('Content-Type', 'text/csv; charset=utf-8'); + $response->headers->set('Content-Disposition', 'attachment; filename="export_month_charged_days.csv"'); + + return $response; + } } diff --git a/src/schedule-2.0/src/Controller/TaskController.php b/src/schedule-2.0/src/Controller/TaskController.php index fb27118..6828d2f 100755 --- a/src/schedule-2.0/src/Controller/TaskController.php +++ b/src/schedule-2.0/src/Controller/TaskController.php @@ -55,6 +55,7 @@ class TaskController extends AbstractController $data = new Entity(); $defaultnature = $em->getRepository("App:Nature")->findOneBy(['name' => 'Prestation']); $data->setNature($defaultnature); + $data->setActive(true); // Création du formulaire $form = $this->createForm(Form::class,$data,array("mode"=>"submit")); diff --git a/src/schedule-2.0/src/Entity/Task.php b/src/schedule-2.0/src/Entity/Task.php index 3a9f470..89577f4 100644 --- a/src/schedule-2.0/src/Entity/Task.php +++ b/src/schedule-2.0/src/Entity/Task.php @@ -70,7 +70,11 @@ class Task * @ORM\OneToMany(targetEntity="Penalty", mappedBy="task", cascade={"persist"}, orphanRemoval=false) */ private $penaltys; - + /** + * @ORM\Column(name="active", type="boolean") + * + */ + private $active; /** * Calculate Displayname */ @@ -227,6 +231,19 @@ class Task return $this; } + + public function getActive(): ?bool + { + return $this->active; + } + + public function setActive(bool $active): self + { + $this->active = $active; + + return $this; + } + /** * @return Collection|Penalty[] diff --git a/src/schedule-2.0/src/Form/TaskType.php b/src/schedule-2.0/src/Form/TaskType.php index e861bfd..bbf56f9 100644 --- a/src/schedule-2.0/src/Form/TaskType.php +++ b/src/schedule-2.0/src/Form/TaskType.php @@ -56,6 +56,13 @@ class TaskType extends AbstractType "choice_label" => "name", ] ); + + $builder->add("active", + ChoiceType::class,[ + "label" => "Actif", + "choices" => ["Non"=>false, "Oui"=>true] + ] + ); $builder->add('color', TextType::class, [ diff --git a/src/schedule-2.0/templates/Event/list.html.twig b/src/schedule-2.0/templates/Event/list.html.twig index e9dbf6d..1996800 100644 --- a/src/schedule-2.0/templates/Event/list.html.twig +++ b/src/schedule-2.0/templates/Event/list.html.twig @@ -99,7 +99,9 @@ {% for project in projects|sort((a, b) => a.displayname <=> b.displayname) %} {% endfor %} diff --git a/src/schedule-2.0/templates/Export/export_month_charged_days.csv.twig b/src/schedule-2.0/templates/Export/export_month_charged_days.csv.twig new file mode 100644 index 0000000..9a68e2e --- /dev/null +++ b/src/schedule-2.0/templates/Export/export_month_charged_days.csv.twig @@ -0,0 +1,6 @@ +{% block body %} +Mois;Jours_facturés;Jour_non_facturés +{% for month, event in events %} +{{month}};{{event.f}};{{event.nf}} +{% endfor %} +{% endblock %} diff --git a/src/schedule-2.0/templates/Export/list.html.twig b/src/schedule-2.0/templates/Export/list.html.twig index 9d52def..284d40e 100644 --- a/src/schedule-2.0/templates/Export/list.html.twig +++ b/src/schedule-2.0/templates/Export/list.html.twig @@ -43,4 +43,14 @@ EXPORTS DE DONNEES
+Exporter la liste du nombre de jours facturés et non-facturés par mois
+Filtres utiles : Nombre de mois
+