From 0f517ec4021db61d5393670c1d7d4feea11944e2 Mon Sep 17 00:00:00 2001 From: Arnaud Fornerot Date: Tue, 1 Jun 2021 16:58:32 +0200 Subject: [PATCH] Ajout de la notion de domaine (fixes #72) --- src/schedule-2.0/config/routes.yaml | 34 +++- .../src/Controller/DomaineController.php | 180 ++++++++++++++++++ .../src/Controller/HomeController.php | 36 +++- .../src/Controller/OfferController.php | 11 +- .../src/Controller/ProjectController.php | 12 +- .../src/Controller/ReportController.php | 29 ++- .../src/Controller/TaskController.php | 8 +- src/schedule-2.0/src/Entity/Domaine.php | 144 ++++++++++++++ src/schedule-2.0/src/Entity/Project.php | 17 ++ src/schedule-2.0/src/Form/DomaineType.php | 58 ++++++ src/schedule-2.0/src/Form/ProjectType.php | 9 +- .../src/Repository/DomaineRepository.php | 57 ++++++ .../src/Service/sessionListener.php | 14 ++ .../templates/Domaine/edit.html.twig | 70 +++++++ .../templates/Domaine/list.html.twig | 70 +++++++ .../templates/Offer/list.html.twig | 30 ++- .../templates/Project/edit.html.twig | 1 + .../templates/Project/list.html.twig | 35 +++- .../templates/Stat/view.html.twig | 2 +- .../templates/Task/list.html.twig | 31 ++- src/schedule-2.0/templates/base.html.twig | 36 +++- 21 files changed, 850 insertions(+), 34 deletions(-) create mode 100755 src/schedule-2.0/src/Controller/DomaineController.php create mode 100644 src/schedule-2.0/src/Entity/Domaine.php create mode 100644 src/schedule-2.0/src/Form/DomaineType.php create mode 100644 src/schedule-2.0/src/Repository/DomaineRepository.php create mode 100755 src/schedule-2.0/templates/Domaine/edit.html.twig create mode 100644 src/schedule-2.0/templates/Domaine/list.html.twig diff --git a/src/schedule-2.0/config/routes.yaml b/src/schedule-2.0/config/routes.yaml index e61e9c7..84a237a 100644 --- a/src/schedule-2.0/config/routes.yaml +++ b/src/schedule-2.0/config/routes.yaml @@ -19,6 +19,10 @@ app_home_selectservice: path: /user/selectservice defaults: { _controller: App\Controller\HomeController:selectservice } +app_home_selectdomaine: + path: /user/selectdomaine + defaults: { _controller: App\Controller\HomeController:selectdomaine } + #== Security ==================================================================================================== app_login: path: /login @@ -114,6 +118,23 @@ app_service_delete: path: /admin/service/delete/{id} defaults: { _controller: App\Controller\ServiceController:delete } +#== Domaine ===================================================================================================== +app_domaine: + path: /admin/domaine + defaults: { _controller: App\Controller\DomaineController:list } + +app_domaine_submit: + path: /admin/domaine/submit + defaults: { _controller: App\Controller\DomaineController:submit } + +app_domaine_update: + path: /admin/domaine/update/{id} + defaults: { _controller: App\Controller\DomaineController:update } + +app_domaine_delete: + path: /admin/domaine/delete/{id} + defaults: { _controller: App\Controller\DomaineController:delete } + #== Nature ===================================================================================================== app_nature: path: /admin/nature @@ -191,11 +212,14 @@ app_project_activeproject: path: /master/project/activeproject defaults: { _controller: App\Controller\ProjectController:activeproject } +app_project_viewservice: + path: /master/project/viewservice + defaults: { _controller: App\Controller\ProjectController:viewservice } + app_project_select: path: /master/project/select defaults: { _controller: App\Controller\ProjectController:select } - app_project_users_add: path: /master/project/users/add defaults: { _controller: App\Controller\ProjectController:usersadd } @@ -233,6 +257,10 @@ app_offer_activeoffer: path: /master/offer/activeoffer defaults: { _controller: App\Controller\OfferController:activeoffer } +app_offer_viewservice: + path: /master/offer/viewservice + defaults: { _controller: App\Controller\OfferController:viewservice } + app_offer_getorders: path: /master/offer/getorders defaults: { _controller: App\Controller\OfferController:getorders } @@ -266,6 +294,10 @@ app_task_activetask: path: /master/task/activetask defaults: { _controller: App\Controller\TaskController:activetask } +app_task_viewservice: + path: /master/task/viewservice + defaults: { _controller: App\Controller\TaskController:viewservice } + #== Event ==================================================================================================== app_event: path: /user/event diff --git a/src/schedule-2.0/src/Controller/DomaineController.php b/src/schedule-2.0/src/Controller/DomaineController.php new file mode 100755 index 0000000..563beaa --- /dev/null +++ b/src/schedule-2.0/src/Controller/DomaineController.php @@ -0,0 +1,180 @@ +knpSnappy = $knpSnappy; } + + public function list(Request $request) + { + $em = $this->getDoctrine()->getManager(); + $datas = $em->getRepository($this->entity)->findAll(); + + if($request->query->get('fgprint')) { + $render = $this->renderView($this->render.'list.html.twig',[ + $this->data."s" => $datas, + "useheader" => true, + "usesidebar" => true, + "fgprint" => true, + ]); + + return new PdfResponse( + $this->knpSnappy->getOutputFromHtml($render), + 'domaines.pdf' + ); + } + else { + return $this->render($this->render.'list.html.twig',[ + $this->data."s" => $datas, + "useheader" => true, + "usesidebar" => true, + ]); + } + } + + public function submit(Request $request) + { + // Initialisation de l'enregistrement + $em = $this->getDoctrine()->getManager(); + $data = new Entity(); + + // Création du formulaire + $form = $this->createForm(Form::class,$data,array("mode"=>"submit")); + + // Récupération des data du formulaire + $form->handleRequest($request); + + // Sur erreur + $this->getErrorForm(null,$form,$request,$data,"submit"); + + // Sur validation + if ($form->get('submit')->isClicked() && $form->isValid()) { + $data = $form->getData(); + $em->persist($data); + $em->flush(); + + // Retour à la liste + return $this->redirectToRoute($this->route); + } + + // Affichage du formulaire + return $this->render($this->render.'edit.html.twig', [ + 'useheader' => true, + 'usesidebar' => true, + $this->data => $data, + 'mode' => 'submit', + 'form' => $form->createView() + ]); + } + + public function update($id,Request $request) + { + // Initialisation de l'enregistrement + $em = $this->getDoctrine()->getManager(); + $data=$em->getRepository($this->entity)->find($id); + + // Création du formulaire + $form = $this->createForm(Form::class,$data,array("mode"=>"update")); + + // Récupération des data du formulaire + $form->handleRequest($request); + + // Sur erreur + $this->getErrorForm(null,$form,$request,$data,"update"); + + // Sur validation + if ($form->get('submit')->isClicked() && $form->isValid()) { + $data = $form->getData(); + $em->persist($data); + $em->flush(); + + // Retour à la liste + return $this->redirectToRoute($this->route); + } + + // Affichage du formulaire + if($request->query->get('fgprint')) { + $render = $this->renderView($this->render.'edit.html.twig', [ + 'useheader' => true, + 'usesidebar' => true, + $this->data => $data, + 'mode' => 'update', + 'form' => $form->createView(), + "fgprint" => true, + ]); + + return new PdfResponse( + $this->knpSnappy->getOutputFromHtml($render), + 'domaine.pdf' + ); + } + else { + return $this->render($this->render.'edit.html.twig', [ + 'useheader' => true, + 'usesidebar' => true, + $this->data => $data, + 'mode' => 'update', + 'form' => $form->createView() + ]); + } + } + + public function delete($id,Request $request) + { + // Initialisation de l'enregistrement + $em = $this->getDoctrine()->getManager(); + $data=$em->getRepository($this->entity)->find($id); + + // Controle avant suppression + $error=false; + if($error) + return $this->redirectToRoute($this->route."_update",["id"=>$id]); + else { + try { + $em->remove($data); + $em->flush(); + } + catch(\Doctrine\DBAL\DBALException $e) { + // Création du formulaire + $this->get('session')->getFlashBag()->add('error', 'Impossible de supprimer cet enregistrement'); + return $this->redirectToRoute($this->route."_update",["id"=>$id]); + } + + // Retour à la liste + return $this->redirectToRoute($this->route); + } + } + + protected function getErrorForm($id,$form,$request,$data,$mode) { + if ($form->get('submit')->isClicked()&&$mode=="delete") { + } + + if ($form->get('submit')->isClicked() && $mode=="submit") { + } + + if ($form->get('submit')->isClicked() && !$form->isValid()) { + $this->get('session')->getFlashBag()->clear(); + + $errors = $form->getErrors(); + foreach( $errors as $error ) { + $request->getSession()->getFlashBag()->add("error", $error->getMessage()); + } + } + } +} diff --git a/src/schedule-2.0/src/Controller/HomeController.php b/src/schedule-2.0/src/Controller/HomeController.php index 90b1c7c..838951f 100755 --- a/src/schedule-2.0/src/Controller/HomeController.php +++ b/src/schedule-2.0/src/Controller/HomeController.php @@ -61,7 +61,9 @@ class HomeController extends AbstractController { $em = $this->getDoctrine()->getManager(); + $iddomaine = $this->get('session')->get('iddomaine'); $idservice = $request->request->get('idservice'); + $this->get('session')->set('idservice',$idservice); $output=["return"=>"OK"]; @@ -86,12 +88,40 @@ class HomeController extends AbstractController } $this->get('session')->set('users',$tbusers); if(!$haveuser) $this->get('session')->set("iduser","all"); + + // On recalcul les projets + $this->regenProjects($idservice,$iddomaine); + + return new Response(json_encode($output)); + } + + public function selectdomaine(Request $request) + { + $iddomaine = $request->request->get('iddomaine'); + $idservice = $this->get('session')->get('idservice'); + + $this->get('session')->set('iddomaine',$iddomaine); + $output=["return"=>"OK"]; // On recalcul les projets - if($idservice=="all") + $this->regenProjects($idservice,$iddomaine); + + + return new Response(json_encode($output)); + } + + private function regenProjects($idservice,$iddomaine) { + $em = $this->getDoctrine()->getManager(); + + if($idservice=="all"&&$iddomaine=="all") $projects=$em->getRepository('App:Project')->findBy(["active"=>$this->get('session')->get('activeproject')]); - else + elseif($idservice!="all"&&$iddomaine!="all") + $projects=$em->getRepository('App:Project')->findBy(["active"=>$this->get('session')->get('activeproject'),"service"=>$idservice,"domaine"=>$iddomaine]); + elseif($idservice!="all") $projects=$em->getRepository('App:Project')->findBy(["active"=>$this->get('session')->get('activeproject'),"service"=>$idservice]); + else + $projects=$em->getRepository('App:Project')->findBy(["active"=>$this->get('session')->get('activeproject'),"domaine"=>$iddomaine]); + $tbprojects=[]; $haveproject=false; foreach($projects as $project) { @@ -106,7 +136,5 @@ class HomeController extends AbstractController } $this->get('session')->set('projects',$tbprojects); if(!$haveproject) $this->get('session')->set("idproject","all"); - - return new Response(json_encode($output)); } } diff --git a/src/schedule-2.0/src/Controller/OfferController.php b/src/schedule-2.0/src/Controller/OfferController.php index 1b4512b..fb37e83 100755 --- a/src/schedule-2.0/src/Controller/OfferController.php +++ b/src/schedule-2.0/src/Controller/OfferController.php @@ -29,10 +29,12 @@ class OfferController extends AbstractController { $em = $this->getDoctrine()->getManager(); $services=$em->getRepository("App:Service")->findAllOfferActive($this->get('session')->get('activeproject'),$this->get('session')->get('activeoffer'),$this->get('session')->get('idservice')); - + $domaines=$em->getRepository("App:Domaine")->findAllOfferActive($this->get('session')->get('activeproject'),$this->get('session')->get('activeoffer'),$this->get('session')->get('iddomaine')); + if($request->query->get('fgprint')) { $render = $this->renderView($this->render.'list.html.twig',[ "services" => $services, + "domaines" => $domaines, "useheader" => true, "usesidebar" => true, "fgprint" => true, @@ -46,6 +48,7 @@ class OfferController extends AbstractController else { return $this->render($this->render.'list.html.twig',[ "services" => $services, + "domaines" => $domaines, "useheader" => true, "usesidebar" => true, "doliactive" => $this->getParameter('doliActive'), @@ -219,6 +222,12 @@ class OfferController extends AbstractController $this->get('session')->set('activeoffer',!$this->get('session')->get('activeoffer')); return $this->redirectToRoute($this->route); } + + public function viewservice() { + $this->get('session')->set('viewservice',!$this->get('session')->get('viewservice')); + return $this->redirectToRoute($this->route); + } + public function getorders(){ $em = $this->getDoctrine()->getManager(); $orders = $this->dolibarrapi->getOrders(); diff --git a/src/schedule-2.0/src/Controller/ProjectController.php b/src/schedule-2.0/src/Controller/ProjectController.php index 87a3540..d3a5ad5 100755 --- a/src/schedule-2.0/src/Controller/ProjectController.php +++ b/src/schedule-2.0/src/Controller/ProjectController.php @@ -27,10 +27,12 @@ class ProjectController extends AbstractController { $em = $this->getDoctrine()->getManager(); $services=$em->getRepository("App:Service")->findAllProjectActive($this->get('session')->get('activeproject'),$this->get('session')->get('idservice')); - + $domaines=$em->getRepository("App:Domaine")->findAllProjectActive($this->get('session')->get('activeproject'),$this->get('session')->get('iddomaine')); + if($request->query->get('fgprint')) { $render = $this->renderView($this->render.'list.html.twig',[ "services" => $services, + "domaines" => $domaines, "useheader" => true, "usesidebar" => true, "fgprint" => true, @@ -44,6 +46,7 @@ class ProjectController extends AbstractController else { return $this->render($this->render.'list.html.twig',[ "services" => $services, + "domaines" => $domaines, "useheader" => true, "usesidebar" => true, ]); @@ -287,6 +290,13 @@ class ProjectController extends AbstractController return $this->redirectToRoute($this->route); } + public function viewservice() { + $this->get('session')->set('viewservice',!$this->get('session')->get('viewservice')); + $this->refreshsession(); + + return $this->redirectToRoute($this->route); + } + protected function refreshsession() { $em = $this->getDoctrine()->getManager(); $tbprojects=[]; diff --git a/src/schedule-2.0/src/Controller/ReportController.php b/src/schedule-2.0/src/Controller/ReportController.php index 6786d89..162403c 100755 --- a/src/schedule-2.0/src/Controller/ReportController.php +++ b/src/schedule-2.0/src/Controller/ReportController.php @@ -246,12 +246,19 @@ class ReportController extends AbstractController continue; } + // Filtre par Domaine + if($this->get('session')->get('iddomaine')!="all") { + if($project->getDomaine()->getId()!=$this->get('session')->get('iddomaine')) + 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; @@ -501,6 +508,12 @@ class ReportController extends AbstractController continue; } + // Filtre par Domaine + if($this->get('session')->get('iddomaine')!="all") { + if($project->getDomaine()->getId()!=$this->get('session')->get('iddomaine')) + continue; + } + // Filtre par project if($this->get('session')->get('idproject')!="all") { if($project->getId()!=$this->get('session')->get('idproject')) @@ -713,8 +726,6 @@ class ReportController extends AbstractController $end->add(new \DateInterval('P'.$nbmonth.'M')); $end->sub(new \DateInterval('P1D')); $end->setTime(23,59,0); - dump($start); - dump($end); while($start<$end) { $tbproject["months"][$start->format("Ym")]=[ "monthid"=> $start->format("Ym"), @@ -906,6 +917,7 @@ class ReportController extends AbstractController $project=$event->getTask()->getProject(); $idproject=$project->getId(); $idservice=$project->getService()->getId(); + $iddomaine=$project->getDomaine()->getId(); $activeproject=$project->getActive(); // Filtre par Service @@ -914,6 +926,12 @@ class ReportController extends AbstractController continue; } + // Filtre par Domaine + if($this->get('session')->get('iddomaine')!="all") { + if($iddomaine!=$this->get('session')->get('iddomaine')) + continue; + } + // Filtre par project if($this->get('session')->get('idproject')!="all") { if($idproject!=$this->get('session')->get('idproject')) @@ -968,6 +986,7 @@ class ReportController extends AbstractController $project=$penalty->getTask()->getProject(); $idproject=$project->getId(); $idservice=$project->getService()->getId(); + $iddomaine=$project->getDomaine()->getId(); $activeproject=$project->getActive(); // Filtre par Service @@ -976,6 +995,12 @@ class ReportController extends AbstractController continue; } + // Filtre par Domaine + if($this->get('session')->get('iddomaine')!="all") { + if($iddomaine!=$this->get('session')->get('iddomaine')) + continue; + } + // Filtre par project if($this->get('session')->get('idproject')!="all") { if($idproject!=$this->get('session')->get('idproject')) diff --git a/src/schedule-2.0/src/Controller/TaskController.php b/src/schedule-2.0/src/Controller/TaskController.php index 77bd776..1367e5d 100755 --- a/src/schedule-2.0/src/Controller/TaskController.php +++ b/src/schedule-2.0/src/Controller/TaskController.php @@ -25,10 +25,12 @@ class TaskController extends AbstractController { $em = $this->getDoctrine()->getManager(); $services=$em->getRepository("App:Service")->findAllTaskActive($this->get('session')->get('activeproject'),$this->get('session')->get('idservice')); + $domaines=$em->getRepository("App:Domaine")->findAllTaskActive($this->get('session')->get('activeproject'),$this->get('session')->get('iddomaine')); if($request->query->get('fgprint')) { $render = $this->renderView($this->render.'list.html.twig',[ "services" => $services, + "domaines" => $domaines, "useheader" => true, "usesidebar" => true, "fgprint" => true, @@ -42,6 +44,7 @@ class TaskController extends AbstractController else { return $this->render($this->render.'list.html.twig',[ "services" => $services, + "domaines" => $domaines, "useheader" => true, "usesidebar" => true, ]); @@ -173,12 +176,11 @@ class TaskController extends AbstractController return $this->redirectToRoute($this->route); } - public function activeoffer() { - $this->get('session')->set('activeoffer',!$this->get('session')->get('activeoffer')); + public function viewservice() { + $this->get('session')->set('viewservice',!$this->get('session')->get('viewservice')); return $this->redirectToRoute($this->route); } - protected function getErrorForm($id,$form,$request,$data,$mode) { if ($form->get('submit')->isClicked()&&$mode=="delete") { } diff --git a/src/schedule-2.0/src/Entity/Domaine.php b/src/schedule-2.0/src/Entity/Domaine.php new file mode 100644 index 0000000..fd3f73e --- /dev/null +++ b/src/schedule-2.0/src/Entity/Domaine.php @@ -0,0 +1,144 @@ +users = new ArrayCollection(); + $this->projects = new ArrayCollection(); + } + + + public function getId(): ?int + { + return $this->id; + } + + public function getName(): ?string + { + return $this->name; + } + + public function setName(string $name): self + { + $this->name = $name; + + return $this; + } + + public function getDescription(): ?string + { + return $this->description; + } + + public function setDescription(?string $description): self + { + $this->description = $description; + + return $this; + } + + /** + * @return Collection|User[] + */ + public function getUsers(): Collection + { + return $this->users; + } + + public function addUser(User $user): self + { + if (!$this->users->contains($user)) { + $this->users[] = $user; + $user->setDomaine($this); + } + + return $this; + } + + public function removeUser(User $user): self + { + if ($this->users->contains($user)) { + $this->users->removeElement($user); + // set the owning side to null (unless already changed) + if ($user->getDomaine() === $this) { + $user->setDomaine(null); + } + } + + return $this; + } + + /** + * @return Collection|Project[] + */ + public function getProjects(): Collection + { + return $this->projects; + } + + public function addProject(Project $project): self + { + if (!$this->projects->contains($project)) { + $this->projects[] = $project; + $project->setDomaine($this); + } + + return $this; + } + + public function removeProject(Project $project): self + { + if ($this->projects->contains($project)) { + $this->projects->removeElement($project); + // set the owning side to null (unless already changed) + if ($project->getDomaine() === $this) { + $project->setDomaine(null); + } + } + + return $this; + } + +} diff --git a/src/schedule-2.0/src/Entity/Project.php b/src/schedule-2.0/src/Entity/Project.php index 9199eb4..b72e8b0 100644 --- a/src/schedule-2.0/src/Entity/Project.php +++ b/src/schedule-2.0/src/Entity/Project.php @@ -51,6 +51,11 @@ class Project */ private $service; + /** + * @ORM\ManyToOne(targetEntity="Domaine", inversedBy="projects") + */ + private $domaine; + /** * @ORM\OneToMany(targetEntity="Offer", mappedBy="project", cascade={"persist"}, orphanRemoval=false) */ @@ -242,5 +247,17 @@ class Project return $this; } + public function getDomaine(): ?Domaine + { + return $this->domaine; + } + + public function setDomaine(?Domaine $domaine): self + { + $this->domaine = $domaine; + + return $this; + } + } diff --git a/src/schedule-2.0/src/Form/DomaineType.php b/src/schedule-2.0/src/Form/DomaineType.php new file mode 100644 index 0000000..aa80254 --- /dev/null +++ b/src/schedule-2.0/src/Form/DomaineType.php @@ -0,0 +1,58 @@ +add('submit', + SubmitType::class, [ + "label" => "Valider", + "attr" => ["class" => "btn btn-success no-print"], + ] + ); + + $builder->add('name', + TextType::class, [ + "label" =>"Nom" + ] + ); + + $builder->add('description', + CKEditorType::class, [ + "required" => false, + "config" => [ + 'uiColor' => '#ffffff', + ], + ] + ); + } + + public function configureOptions(OptionsResolver $resolver) + { + $resolver->setDefaults(array( + 'data_class' => 'App\Entity\Domaine', + 'mode' => 'string', + )); + } +} diff --git a/src/schedule-2.0/src/Form/ProjectType.php b/src/schedule-2.0/src/Form/ProjectType.php index 38ba9bb..0dbcd67 100644 --- a/src/schedule-2.0/src/Form/ProjectType.php +++ b/src/schedule-2.0/src/Form/ProjectType.php @@ -69,11 +69,18 @@ class ProjectType extends AbstractType $builder->add('service', EntityType::class, [ "class" => "App:Service", - "label" => "Service", + "label" => "Activité", "choice_label" => "name", ] ); + $builder->add('domaine', + EntityType::class, [ + "class" => "App:Domaine", + "label" => "Domaine", + "choice_label" => "name", + ] + ); } public function configureOptions(OptionsResolver $resolver) diff --git a/src/schedule-2.0/src/Repository/DomaineRepository.php b/src/schedule-2.0/src/Repository/DomaineRepository.php new file mode 100644 index 0000000..f61f0a1 --- /dev/null +++ b/src/schedule-2.0/src/Repository/DomaineRepository.php @@ -0,0 +1,57 @@ +createQueryBuilder('domaine') + ->from('App:Project','project') + ->Where('project.active=:activeproject') + ->andWhere('project.domaine=domaine'); + + if($iddomaine!="all") + $qb->andWhere("domaine.id=:id")->setParameter('id',$iddomaine); + + return $qb->getQuery()->setParameter('activeproject',$activeproject)->getResult(); + } + + public function findAllOfferActive($activeproject,$activeoffer,$iddomaine) { + $qb = $this->createQueryBuilder('domaine') + ->from('App:Project','project') + ->from('App:Offer','offer') + ->Where('offer.active=:activeoffer') + ->andWhere('project.active=:activeproject') + ->andWhere('project.domaine=domaine') + ->andWhere('offer.project=project'); + + if($iddomaine!="all") + $qb->andWhere("domaine.id=:id")->setParameter('id',$iddomaine); + + return $qb->getQuery()->setParameter('activeproject',$activeproject)->setParameter('activeoffer',$activeoffer)->getResult(); + } + + public function findAllTaskActive($activeproject,$iddomaine) { + $qb = $this->createQueryBuilder('domaine') + ->from('App:Project','project') + ->Where('project.active=:activeproject') + ->andWhere('project.domaine=domaine'); + + if($iddomaine!="all") + $qb->andWhere("domaine.id=:id")->setParameter('id',$iddomaine); + + return $qb->getQuery()->setParameter('activeproject',$activeproject)->getResult(); + } +} diff --git a/src/schedule-2.0/src/Service/sessionListener.php b/src/schedule-2.0/src/Service/sessionListener.php index 00b4412..89f3121 100644 --- a/src/schedule-2.0/src/Service/sessionListener.php +++ b/src/schedule-2.0/src/Service/sessionListener.php @@ -71,6 +71,7 @@ class sessionListener { $session->set('activeoffer',true); $session->set('activeholiday',true); $session->set('activetimer',true); + $session->set('viewservice',true); $session->set('nbmonth',3); if($curentuser!="anon.") { @@ -81,11 +82,13 @@ class sessionListener { $session->set('idproject',"all"); $session->set('idservice',"all"); + $session->set('iddomaine',"all"); } else { $session->set('iduser',"all"); $session->set('idproject',"all"); $session->set('idservice',"all"); + $session->set('iddomaine',"all"); } $tbusers=[]; @@ -123,6 +126,17 @@ class sessionListener { } $session->set('services',$tbservices); + $tbdomaines=[]; + $domaines=$this->em->getRepository('App:Domaine')->findAll(); + foreach($domaines as $domaine) { + $tmp=[ + "id"=>$domaine->getId(), + "name"=>$domaine->getName() + ]; + array_push($tbdomaines,$tmp); + } + $session->set('domaines',$tbdomaines); + } } } diff --git a/src/schedule-2.0/templates/Domaine/edit.html.twig b/src/schedule-2.0/templates/Domaine/edit.html.twig new file mode 100755 index 0000000..f6a3700 --- /dev/null +++ b/src/schedule-2.0/templates/Domaine/edit.html.twig @@ -0,0 +1,70 @@ +{% extends 'base.html.twig' %} + +{% block body %} +{{ form_start(form) }} +

+ {% if fgprint is defined and fgprint %} + DOMAINE + {% elseif mode=="update" %} + Modification DOMAINE + {% elseif mode=="submit" %} + Création DOMAINE + {% endif %} +

+ + {{ form_widget(form.submit) }} + + Annuler + + {% if mode=="update" %} + + + Supprimer + + {% endif %} + +

+ + {% if app.session.flashbag.has('error') %} +
+ Erreur
+ {% for flashMessage in app.session.flashbag.get('error') %} + {{ flashMessage }}
+ {% endfor %} +
+ {% endif %} + + {% if app.session.flashbag.has('notice') %} +
+ Information
+ {% for flashMessage in app.session.flashbag.get('notice') %} + {{ flashMessage }}
+ {% endfor %} +
+ {% endif %} +
+
+ Informations +
+ +
+ {{ form_row(form.name) }} + {{ form_row(form.description) }} +
+
+{{ form_end(form) }} +{% endblock %} + +{% block localjavascript %} + $(document).ready(function() { + $("#domaine_name").focus(); + }); + + function myprint() { + href=document.location.href; + document.location.href=href+"?fgprint=true"; + } +{% endblock %} diff --git a/src/schedule-2.0/templates/Domaine/list.html.twig b/src/schedule-2.0/templates/Domaine/list.html.twig new file mode 100644 index 0000000..7f5e081 --- /dev/null +++ b/src/schedule-2.0/templates/Domaine/list.html.twig @@ -0,0 +1,70 @@ +{% extends "base.html.twig" %} +{% block localstyle %} + {% if fgprint is defined and fgprint %} + table { font-size:10px;} + th,td { + border: 1px solid #37474F; + } + thead { + display: table-header-group; + } + tr { page-break-inside: avoid; } + {%endif%} +{% endblock %} + +{% block body %} +

+DOMAINES +

+ +

Ajouter

+ +
+
+ Liste des Domaines +
+ +
+
+ + + + + + + + + {% for domaine in domaines %} + + + + + {% endfor %} + +
ActionNom
+ + {{domaine.name}}
+
+
+
+{% endblock %} + +{% block localjavascript %} + $(document).ready(function() { + {% if not fgprint is defined or not fgprint %} + $('#dataTables').DataTable({ + columnDefs: [ { "targets": "no-sort", "orderable": false }, { "targets": "no-string", "type" : "num" } ], + responsive: true, + iDisplayLength: 100, + order: [[ 1, "asc" ]] + }); + {%else%} + $('#dataTables').removeClass("table table-striped table-bordered table-hover small dataTable no-footer"); + {% endif %} + }); + + function myprint() { + href=document.location.href; + document.location.href=href+"?fgprint=true"; + } +{% endblock %} \ No newline at end of file diff --git a/src/schedule-2.0/templates/Offer/list.html.twig b/src/schedule-2.0/templates/Offer/list.html.twig index 3cfa755..a22bde3 100644 --- a/src/schedule-2.0/templates/Offer/list.html.twig +++ b/src/schedule-2.0/templates/Offer/list.html.twig @@ -18,7 +18,7 @@ {% block body %}

- COMMANDES + COMMANDES {% if app.session.get('viewservice') %}PAR ACTVITE{%else%}PAR DOMAINE{%endif%}

Ajouter @@ -36,13 +36,28 @@ +
+ + {% if app.session.get('viewservice') %} + + {% else %} + + {% endif %} +
+

- {%for service in services %} - {% if not service.projects is empty %} + {% if app.session.get('viewservice') %} + {% set loop01s=services %} + {% else %} + {% set loop01s=domaines %} + {% endif %} + + {%for loop01 in loop01s %} + {% if not loop01.projects is empty %} {% set haveoffer=false %} {% set haveproject=false %} - {% for project in service.projects %} + {% for project in loop01.projects %} {% if app.session.get('activeproject')==project.active and (app.session.get('idproject')=="all" or app.session.get('idproject')==project.id) %} {% for offer in project.offers %} {% if app.session.get('activeoffer')==offer.active %} @@ -57,7 +72,7 @@ {% if haveoffer and haveproject %}
- {{ service.name }} + {{ loop01.name }}
@@ -76,7 +91,7 @@ - {% for project in service.projects %} + {% for project in loop01.projects %} {% if app.session.get('activeproject')==project.active and (app.session.get('idproject')=="all" or app.session.get('idproject')==project.id) %} {% for offer in project.offers %} {% if app.session.get('activeoffer')==offer.active %} @@ -139,4 +154,7 @@ window.location="{{ path('app_offer_activeoffer' )}}"; }); + $('#switchservice').change(function() { + window.location="{{ path('app_offer_viewservice' )}}"; + }); {% endblock %} \ No newline at end of file diff --git a/src/schedule-2.0/templates/Project/edit.html.twig b/src/schedule-2.0/templates/Project/edit.html.twig index 5c081b7..d752b3b 100755 --- a/src/schedule-2.0/templates/Project/edit.html.twig +++ b/src/schedule-2.0/templates/Project/edit.html.twig @@ -56,6 +56,7 @@ {{ form_row(form.customer) }} {{ form_row(form.visible) }} {{ form_row(form.service) }} + {{ form_row(form.domaine) }}
{{ form_end(form) }} diff --git a/src/schedule-2.0/templates/Project/list.html.twig b/src/schedule-2.0/templates/Project/list.html.twig index 80b4b93..ed80895 100644 --- a/src/schedule-2.0/templates/Project/list.html.twig +++ b/src/schedule-2.0/templates/Project/list.html.twig @@ -19,7 +19,7 @@ {% block body %}

- PROJETS + PROJETS {% if app.session.get('viewservice') %} PAR ACTVITE{%else%} PAR DOMAINE{%endif%}

Ajouter @@ -29,13 +29,28 @@ +
+ + {% if app.session.get('viewservice') %} + + {% else %} + + {% endif %} +
+

- {%for service in services %} - {% if not service.projects is empty %} + {% if app.session.get('viewservice') %} + {% set loop01s=services %} + {% else %} + {% set loop01s=domaines %} + {% endif %} + + {%for loop01 in loop01s %} + {% if not loop01.projects is empty %} {% set haveproject=false %} - {% for project in service.projects %} + {% for project in loop01.projects %} {% if app.session.get('activeproject')==project.active and (app.session.get('idproject')=="all" or app.session.get('idproject')==project.id) %} {% set haveproject=true %} {% endif %} @@ -44,7 +59,7 @@ {% if haveproject %}
- {{ service.name }} + {{ loop01.name }}
@@ -53,8 +68,9 @@ Action - Client + Client Nom + {% if app.session.get('viewservice') %}Domaine{%else%}Activité{%endif%} Estimé Commandé Validé @@ -64,7 +80,7 @@ - {% for project in service.projects %} + {% for project in loop01.projects %} {% if app.session.get('activeproject')==project.active and (app.session.get('idproject')=="all" or app.session.get('idproject')==project.id) %} @@ -79,6 +95,7 @@ {{project.customer.name}} {{project.name}} + {% if app.session.get('viewservice') %}{%if not project.domaine is empty %}{{project.domaine.name}}{%endif%}{%else%}{{project.service.name}}{%endif%} {% set tottask=0 %} {% set totvalidate=0 %} @@ -155,6 +172,10 @@ window.location="{{ path('app_project_activeproject' )}}"; }); + $('#switchservice').change(function() { + window.location="{{ path('app_project_viewservice' )}}"; + }); + function myprint() { href=document.location.href; document.location.href=href+"?fgprint=true"; diff --git a/src/schedule-2.0/templates/Stat/view.html.twig b/src/schedule-2.0/templates/Stat/view.html.twig index c3b9967..13194be 100644 --- a/src/schedule-2.0/templates/Stat/view.html.twig +++ b/src/schedule-2.0/templates/Stat/view.html.twig @@ -7,7 +7,7 @@ STATISTIQUES
-
+
CADOLES diff --git a/src/schedule-2.0/templates/Task/list.html.twig b/src/schedule-2.0/templates/Task/list.html.twig index 13e40b0..38f9738 100644 --- a/src/schedule-2.0/templates/Task/list.html.twig +++ b/src/schedule-2.0/templates/Task/list.html.twig @@ -20,7 +20,7 @@ {% block body %}

- TACHES + TACHES {% if app.session.get('viewservice') %}PAR ACTVITE{%else%}PAR DOMAINE{%endif%}

Ajouter @@ -35,14 +35,29 @@
+
+ + {% if app.session.get('viewservice') %} + + {% else %} + + {% endif %} +
+

- {%for service in services %} - {% if not service.projects is empty %} + {% if app.session.get('viewservice') %} + {% set loop01s=services %} + {% else %} + {% set loop01s=domaines %} + {% endif %} + + {%for loop01 in loop01s %} + {% if not loop01.projects is empty %} {% set havetask=false %} {% set haveproject=false %} - {% for project in service.projects %} + {% for project in loop01.projects %} {% if app.session.get('activeproject')==project.active and (app.session.get('idproject')=="all" or app.session.get('idproject')==project.id) %} {% if not project.tasks is empty %} {% set havetask=true %} @@ -55,7 +70,7 @@ {% if haveproject and havetask %}
- {{ service.name }} + {{ loop01.name }}
@@ -77,7 +92,7 @@ - {% for project in service.projects %} + {% for project in loop01.projects %} {% if app.session.get('activeproject')==project.active and (app.session.get('idproject')=="all" or app.session.get('idproject')==project.id) %} {% for task in project.tasks %} {% if app.session.get('activetask')==task.active %} @@ -145,10 +160,14 @@ $('#switchactive').change(function() { window.location="{{ path('app_task_activeproject' )}}"; }); + $('#switchactivetask').change(function() { window.location="{{ path('app_task_activetask' )}}"; }); + $('#switchservice').change(function() { + window.location="{{ path('app_task_viewservice' )}}"; + }); function myprint() { href=document.location.href; diff --git a/src/schedule-2.0/templates/base.html.twig b/src/schedule-2.0/templates/base.html.twig index 875014e..7b125dd 100644 --- a/src/schedule-2.0/templates/base.html.twig +++ b/src/schedule-2.0/templates/base.html.twig @@ -292,7 +292,21 @@
- + +
+ +