From 08249abbf53f29e70c4518989145e1139f43647f Mon Sep 17 00:00:00 2001 From: Arnaud Fornerot Date: Wed, 10 Jun 2020 10:22:47 +0200 Subject: [PATCH 01/63] controle sur suppression --- .../src/Controller/BreakdayController.php | 11 +++++++-- .../src/Controller/CustomerController.php | 11 +++++++-- .../src/Controller/JobController.php | 11 +++++++-- .../src/Controller/NatureController.php | 11 +++++++-- .../src/Controller/OfferController.php | 11 +++++++-- .../src/Controller/ProjectController.php | 12 ++++++++-- .../src/Controller/SecurityController.php | 24 +++++-------------- .../src/Controller/ServiceController.php | 11 +++++++-- .../src/Controller/TaskController.php | 11 +++++++-- .../src/Controller/UserController.php | 12 ++++++++-- 10 files changed, 89 insertions(+), 36 deletions(-) diff --git a/src/schedule-2.0/src/Controller/BreakdayController.php b/src/schedule-2.0/src/Controller/BreakdayController.php index 5880b9c..f019473 100755 --- a/src/schedule-2.0/src/Controller/BreakdayController.php +++ b/src/schedule-2.0/src/Controller/BreakdayController.php @@ -136,8 +136,15 @@ class BreakdayController extends AbstractController if($error) return $this->redirectToRoute($this->route."_update",["id"=>$id]); else { - $em->remove($data); - $em->flush(); + 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); diff --git a/src/schedule-2.0/src/Controller/CustomerController.php b/src/schedule-2.0/src/Controller/CustomerController.php index b08bea5..74f990e 100755 --- a/src/schedule-2.0/src/Controller/CustomerController.php +++ b/src/schedule-2.0/src/Controller/CustomerController.php @@ -146,8 +146,15 @@ class CustomerController extends AbstractController if($error) return $this->redirectToRoute($this->route."_update",["id"=>$id]); else { - $em->remove($data); - $em->flush(); + 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); diff --git a/src/schedule-2.0/src/Controller/JobController.php b/src/schedule-2.0/src/Controller/JobController.php index ba5f7c0..da1eca3 100755 --- a/src/schedule-2.0/src/Controller/JobController.php +++ b/src/schedule-2.0/src/Controller/JobController.php @@ -146,8 +146,15 @@ class JobController extends AbstractController if($error) return $this->redirectToRoute($this->route."_update",["id"=>$id]); else { - $em->remove($data); - $em->flush(); + 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); diff --git a/src/schedule-2.0/src/Controller/NatureController.php b/src/schedule-2.0/src/Controller/NatureController.php index f4fa49b..f0f35eb 100755 --- a/src/schedule-2.0/src/Controller/NatureController.php +++ b/src/schedule-2.0/src/Controller/NatureController.php @@ -129,8 +129,15 @@ class NatureController extends AbstractController if($error) return $this->redirectToRoute($this->route."_update",["id"=>$id]); else { - $em->remove($data); - $em->flush(); + 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); diff --git a/src/schedule-2.0/src/Controller/OfferController.php b/src/schedule-2.0/src/Controller/OfferController.php index 48d64a4..7ffc0b9 100755 --- a/src/schedule-2.0/src/Controller/OfferController.php +++ b/src/schedule-2.0/src/Controller/OfferController.php @@ -146,8 +146,15 @@ class OfferController extends AbstractController if($error) return $this->redirectToRoute($this->route."_update",["id"=>$id]); else { - $em->remove($data); - $em->flush(); + 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); diff --git a/src/schedule-2.0/src/Controller/ProjectController.php b/src/schedule-2.0/src/Controller/ProjectController.php index 317161a..8912b98 100755 --- a/src/schedule-2.0/src/Controller/ProjectController.php +++ b/src/schedule-2.0/src/Controller/ProjectController.php @@ -150,8 +150,16 @@ class ProjectController extends AbstractController if($error) return $this->redirectToRoute($this->route."_update",["id"=>$id]); else { - $em->remove($data); - $em->flush(); + 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]); + } + $this->refreshsession(); // Retour à la liste diff --git a/src/schedule-2.0/src/Controller/SecurityController.php b/src/schedule-2.0/src/Controller/SecurityController.php index 0b98a22..3e221ed 100755 --- a/src/schedule-2.0/src/Controller/SecurityController.php +++ b/src/schedule-2.0/src/Controller/SecurityController.php @@ -61,6 +61,8 @@ class SecurityController extends AbstractController // Récupération Attribut $attributes = \phpCAS::getAttributes(); + dump($username); + dump($attributes); // Suppression des Attributs en tableaux foreach ($attributes as $key => $value) { @@ -97,7 +99,7 @@ class SecurityController extends AbstractController $user->setPassword("CASPWD-".$username); $user->setSalt("CASPWD-".$username); - $user->setRoles(["ROLE_USER"]); + $user->setRole("ROLE_USER"); $em->persist($user); $em->flush(); @@ -132,26 +134,14 @@ class SecurityController extends AbstractController public function logout() { - $auth_mode=$this->getParameter("appAuth"); - switch($auth_mode) { - case "MYSQL": - return $this->logoutMYSQL(); - break; - - case "CAS": - return $this->logoutCAS(); - break; - } - - } - - public function logoutMYSQL() { $this->get('security.token_storage')->setToken(null); $this->get('session')->invalidate(); - return $this->redirect($this->generateUrl("app_home")); + return $this->redirect($this->generateUrl("cnous_portal_homepage")); } + + public function logoutcas() { // Init Client CAS \phpCAS::setDebug('/var/www/html/schedule/var/log/cas.log'); @@ -162,7 +152,5 @@ class SecurityController extends AbstractController // Logout $url=$this->generateUrl('app_home', array(), UrlGeneratorInterface::ABSOLUTE_URL); \phpCAS::logout(array("service"=>$url)); - - return true; } } diff --git a/src/schedule-2.0/src/Controller/ServiceController.php b/src/schedule-2.0/src/Controller/ServiceController.php index 80c9229..dc61e53 100755 --- a/src/schedule-2.0/src/Controller/ServiceController.php +++ b/src/schedule-2.0/src/Controller/ServiceController.php @@ -146,8 +146,15 @@ class ServiceController extends AbstractController if($error) return $this->redirectToRoute($this->route."_update",["id"=>$id]); else { - $em->remove($data); - $em->flush(); + 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); diff --git a/src/schedule-2.0/src/Controller/TaskController.php b/src/schedule-2.0/src/Controller/TaskController.php index 869d5c5..260bffa 100755 --- a/src/schedule-2.0/src/Controller/TaskController.php +++ b/src/schedule-2.0/src/Controller/TaskController.php @@ -146,8 +146,15 @@ class TaskController extends AbstractController if($error) return $this->redirectToRoute($this->route."_update",["id"=>$id]); else { - $em->remove($data); - $em->flush(); + 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); diff --git a/src/schedule-2.0/src/Controller/UserController.php b/src/schedule-2.0/src/Controller/UserController.php index cbbcb4d..3071fbd 100755 --- a/src/schedule-2.0/src/Controller/UserController.php +++ b/src/schedule-2.0/src/Controller/UserController.php @@ -202,8 +202,16 @@ class UserController extends AbstractController if($error) return $this->redirectToRoute($this->route."_update",["id"=>$id]); else { - $em->remove($data); - $em->flush(); + 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]); + } + $this->refreshsession(); // Retour à la liste From c948be02cc6f260ba227b892deec3544c88fa7de Mon Sep 17 00:00:00 2001 From: root Date: Thu, 11 Jun 2020 11:49:27 +0200 Subject: [PATCH 02/63] suppression dump --- dicos/25_schedule.xml | 4 +++- src/schedule-2.0/src/Controller/SecurityController.php | 2 -- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dicos/25_schedule.xml b/dicos/25_schedule.xml index fc07576..6664caf 100644 --- a/dicos/25_schedule.xml +++ b/dicos/25_schedule.xml @@ -6,7 +6,9 @@ - schedule-apps + schedule diff --git a/src/schedule-2.0/src/Controller/SecurityController.php b/src/schedule-2.0/src/Controller/SecurityController.php index 3e221ed..f1282d5 100755 --- a/src/schedule-2.0/src/Controller/SecurityController.php +++ b/src/schedule-2.0/src/Controller/SecurityController.php @@ -61,8 +61,6 @@ class SecurityController extends AbstractController // Récupération Attribut $attributes = \phpCAS::getAttributes(); - dump($username); - dump($attributes); // Suppression des Attributs en tableaux foreach ($attributes as $key => $value) { From 80227e741630bea90cfc8ca2a00a9682cd74e4c1 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 11 Jun 2020 11:52:19 +0200 Subject: [PATCH 03/63] suppression dump --- src/schedule-2.0/src/Controller/CropController.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/schedule-2.0/src/Controller/CropController.php b/src/schedule-2.0/src/Controller/CropController.php index d1e2def..bda0101 100644 --- a/src/schedule-2.0/src/Controller/CropController.php +++ b/src/schedule-2.0/src/Controller/CropController.php @@ -77,7 +77,6 @@ class CropController extends AbstractController // Cacul de la largeur protected function getWidth($image) { - dump($image); $size = getimagesize($image); $width = $size[0]; return $width; From 20d42d319acd76d163a3970715f23d5d482102a8 Mon Sep 17 00:00:00 2001 From: Matthieu Lamalle Date: Fri, 12 Jun 2020 15:18:53 +0200 Subject: [PATCH 04/63] =?UTF-8?q?Envoie=20de=20notification=20=C3=A0=20la?= =?UTF-8?q?=20pose=20et=20la=20vadliation=20de=20cong=C3=A9s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/schedule-2.0/.env | 11 +++ src/schedule-2.0/config/bundles.php | 1 + .../config/packages/swiftmailer.yaml | 5 ++ .../config/packages/test/swiftmailer.yaml | 5 ++ src/schedule-2.0/config/services.yaml | 11 +++ .../src/Command/SendMailCommand.php | 87 +++++++++++++++++++ .../src/Controller/EventController.php | 11 +++ .../src/Controller/ValidationController.php | 9 +- .../src/Service/notificationService.php | 75 ++++++++++++++++ .../Notif/attentevalidation.html.twig | 25 ++++++ .../templates/Notif/validation.html.twig | 23 +++++ 11 files changed, 262 insertions(+), 1 deletion(-) create mode 100644 src/schedule-2.0/config/packages/swiftmailer.yaml create mode 100644 src/schedule-2.0/config/packages/test/swiftmailer.yaml create mode 100644 src/schedule-2.0/src/Command/SendMailCommand.php create mode 100644 src/schedule-2.0/src/Service/notificationService.php create mode 100644 src/schedule-2.0/templates/Notif/attentevalidation.html.twig create mode 100644 src/schedule-2.0/templates/Notif/validation.html.twig diff --git a/src/schedule-2.0/.env b/src/schedule-2.0/.env index 32372c0..3c5f4b5 100644 --- a/src/schedule-2.0/.env +++ b/src/schedule-2.0/.env @@ -32,6 +32,11 @@ APP_NAME=Schedule APP_ENV=PROD APP_CRON=false +# MAIL sendmail / smtp +MAILER_METHOD=sendmail +MAILER_URL= +MAILER_NOREPLY=noreply@noreply.fr + # BDD DATABASE_NAME= DATABASE_USER= @@ -46,3 +51,9 @@ CAS_USERNAME=username CAS_EMAIL=email CAS_LASTNAME=lastname CAS_FIRSTNAME=firstname + +###> symfony/swiftmailer-bundle ### +# For Gmail as a transport, use: "gmail://username:password@localhost" +# For a generic SMTP server, use: "smtp://localhost:25?encryption=&auth_mode=" +# Delivery is disabled by default via "null://localhost" +MAILER_URL= \ No newline at end of file diff --git a/src/schedule-2.0/config/bundles.php b/src/schedule-2.0/config/bundles.php index 36f3dcf..40aec7b 100644 --- a/src/schedule-2.0/config/bundles.php +++ b/src/schedule-2.0/config/bundles.php @@ -19,4 +19,5 @@ return [ Tetranz\Select2EntityBundle\TetranzSelect2EntityBundle::class => ['all' => true], Oneup\UploaderBundle\OneupUploaderBundle::class => ['all' => true], Knp\Bundle\SnappyBundle\KnpSnappyBundle::class => ['all' => true], + Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle::class => ['all' => true], ]; diff --git a/src/schedule-2.0/config/packages/swiftmailer.yaml b/src/schedule-2.0/config/packages/swiftmailer.yaml new file mode 100644 index 0000000..db8d136 --- /dev/null +++ b/src/schedule-2.0/config/packages/swiftmailer.yaml @@ -0,0 +1,5 @@ +swiftmailer: + url: '%env(MAILER_URL)%' + spool: + type: file + path: '%kernel.project_dir%/var/spoolmail' \ No newline at end of file diff --git a/src/schedule-2.0/config/packages/test/swiftmailer.yaml b/src/schedule-2.0/config/packages/test/swiftmailer.yaml new file mode 100644 index 0000000..db8d136 --- /dev/null +++ b/src/schedule-2.0/config/packages/test/swiftmailer.yaml @@ -0,0 +1,5 @@ +swiftmailer: + url: '%env(MAILER_URL)%' + spool: + type: file + path: '%kernel.project_dir%/var/spoolmail' \ No newline at end of file diff --git a/src/schedule-2.0/config/services.yaml b/src/schedule-2.0/config/services.yaml index 1ac6453..16a1acd 100644 --- a/src/schedule-2.0/config/services.yaml +++ b/src/schedule-2.0/config/services.yaml @@ -9,6 +9,8 @@ parameters: appName: '%env(resolve:APP_NAME)%' appEnv: '%env(resolve:APP_ENV)%' appCron: '%env(resolve:APP_CRON)%' + appMailmethod: '%env(resolve:MAILER_METHOD)%' + appMailnoreply: '%env(resolve:MAILER_NOREPLY)%' casHost: '%env(resolve:CAS_HOST)%' casPort: '%env(resolve:CAS_PORT)%' casPath: '%env(resolve:CAS_PATH)%' @@ -59,3 +61,12 @@ services: tags: - { name: kernel.event_listener, event: kernel.request, method: onDomainParse } + app.sendmail.transport: + class: Swift_SendmailTransport + public: true + arguments: ['/usr/sbin/sendmail -t'] + + app.mail.service: + public: true + class: App\Service\mailService + arguments: ["@mailer", "@twig"] diff --git a/src/schedule-2.0/src/Command/SendMailCommand.php b/src/schedule-2.0/src/Command/SendMailCommand.php new file mode 100644 index 0000000..c3b2833 --- /dev/null +++ b/src/schedule-2.0/src/Command/SendMailCommand.php @@ -0,0 +1,87 @@ +container = $container; + $this->em = $em; + } + + protected function configure() + { + $this + ->setName('app:sendMail') + ->setDescription('Envoi des mails') + ->setHelp('Envoi des mails') + ->addArgument('message-limit', InputArgument::OPTIONAL, 'limit message Mail') + ->addArgument('env', InputArgument::OPTIONAL, 'env Mail') + ->addArgument('cronid', InputArgument::OPTIONAL, 'ID Cron Job') + ->addArgument('lastchance', InputArgument::OPTIONAL, 'Lastchance to run the cron') + ; + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + $this->output = $output; + $this->filesystem = new Filesystem(); + $this->rootlog = $this->container->get('kernel')->getRootDir()."/../var/logs/"; + + $this->writelnred(''); + $this->writelnred('== app:sendMail'); + $this->writelnred('=========================================================================================================='); + + $appMailmethod=$this->container->getParameter("appMailmethod"); + + $command = $this->getApplication()->find("swiftmailer:spool:send"); + $tbparameter["--message-limit"]=100; + $tbparameter["--env"]="prod"; + $tbparameter["--time-limit"]=5; + if($appMailmethod=="sendmail") $tbparameter["--transport"]="app.sendmail.transport"; + + + $parameter = new ArrayInput($tbparameter); + try{ + $returnCode = $command->run($parameter, $output); + } + catch(\Exception $e) { + $this->writeln(""); + $this->writelnred("Impossible d'envoyer des mails"); + $this->writeln(""); + return 0; + } + $this->writeln(""); + + return 1; + + } + + private function writelnred($string) { + $this->output->writeln(''.$string.''); + $this->filesystem->appendToFile($this->rootlog.'cron.log', $string."\n"); + } + private function writeln($string) { + $this->output->writeln($string); + $this->filesystem->appendToFile($this->rootlog.'cron.log', $string."\n"); + } + +} diff --git a/src/schedule-2.0/src/Controller/EventController.php b/src/schedule-2.0/src/Controller/EventController.php index 1e7e4cd..bc3b5c1 100755 --- a/src/schedule-2.0/src/Controller/EventController.php +++ b/src/schedule-2.0/src/Controller/EventController.php @@ -17,6 +17,11 @@ class EventController extends AbstractController private $route = "app_event"; private $render = "Event/"; private $entity = "App:Event"; + private $notificator; + + public function __construct(\App\Service\notificationService $notificator) { + $this->notificator = $notificator; + } public function list(Request $request) { @@ -245,6 +250,12 @@ class EventController extends AbstractController $em->persist($event); $em->flush(); + if($task->getNature()->getIsvacation()){ + $idevent=$event->getId(); + $valid_url = $this->generateUrl('app_validationholiday'); + $this->notificator->sendNotifAttenteValid("Congés en attente de validation", $iduser, $idevent, $valid_url); + + } $output=$this->formatEvent($event); } diff --git a/src/schedule-2.0/src/Controller/ValidationController.php b/src/schedule-2.0/src/Controller/ValidationController.php index 66bc702..f8cc772 100755 --- a/src/schedule-2.0/src/Controller/ValidationController.php +++ b/src/schedule-2.0/src/Controller/ValidationController.php @@ -10,7 +10,11 @@ use Knp\Bundle\SnappyBundle\Snappy\Response\PdfResponse; class ValidationController extends AbstractController { private $knpSnappy; - public function __construct(\Knp\Snappy\Pdf $knpSnappy) { $this->knpSnappy = $knpSnappy; } + private $notificator; + public function __construct(\Knp\Snappy\Pdf $knpSnappy, \App\Service\notificationService $notificator) { + $this->knpSnappy = $knpSnappy; + $this->notificator = $notificator; + } public function validation(Request $request) { @@ -510,6 +514,9 @@ class ValidationController extends AbstractController $event->setValidateholiday(true); $em->persist($event); $em->flush(); + $iduser=$this->get("session")->get("iduser"); + $idevent=$event->getId(); + $this->notificator->sendNotifValid("Congé validé", $iduser, $event); } $output=[]; diff --git a/src/schedule-2.0/src/Service/notificationService.php b/src/schedule-2.0/src/Service/notificationService.php new file mode 100644 index 0000000..4c70c68 --- /dev/null +++ b/src/schedule-2.0/src/Service/notificationService.php @@ -0,0 +1,75 @@ +mailer = $mailer; + $this->twig = $twig; + $this->em = $em; + } + + public function sendNotifAttenteValid($subject, $iduser, $idevent, $valid_url) + { + $template = $this->twig->load('Notif/attentevalidation.html.twig'); + + + $user=$this->em->getRepository("App:User")->find($iduser); + $event=$this->em->getRepository("App:Event")->find($idevent); + + $parameters=[ + 'date' => new \DateTime(), + 'username' => $user->getUsername(), + 'start' => $event->getStart(), + 'end' => $event->getEnd(), + 'duration' => $event->getDuration(), + 'valid_link' => $valid_url, + ]; + $bodyHtml = $template->renderBlock('body', $parameters); + + $message = (new \Swift_Message()) + ->setFrom('schedule@cadoles.com') + ->setSubject($user->getUsername() . " = " . $subject) + ->setTo('conges@cadoles.com') + ->setBody($bodyHtml, 'text/html'); + + $response = $this->mailer->send($message); + + return $response; + } + public function sendNotifValid($subject, $iduser, $idevent) + { + $template = $this->twig->load('Notif/validation.html.twig'); + + + $user=$this->em->getRepository("App:User")->find($iduser); + $event=$this->em->getRepository("App:Event")->find($idevent); + + $parameters=[ + 'date' => new \DateTime(), + 'username' => $user->getUsername(), + 'start' => $event->getStart(), + 'end' => $event->getEnd(), + 'duration' => $event->getDuration(), + ]; + $bodyHtml = $template->renderBlock('body', $parameters); + + $message = (new \Swift_Message()) + ->setFrom('schedule@cadoles.com') + ->setSubject($user->getUsername() . " = " . $subject) + ->setTo('conges@cadoles.com') + ->setBody($bodyHtml, 'text/html'); + + $response = $this->mailer->send($message); + + + return $response; + } +} diff --git a/src/schedule-2.0/templates/Notif/attentevalidation.html.twig b/src/schedule-2.0/templates/Notif/attentevalidation.html.twig new file mode 100644 index 0000000..a224421 --- /dev/null +++ b/src/schedule-2.0/templates/Notif/attentevalidation.html.twig @@ -0,0 +1,25 @@ +{% block body %} +{% autoescape %} +

Date de la demande : {{ date|date("d/m/Y H:i") }}

+

+ Utilisateur = {{ username }} +

+

+ Début = {{ start|date("d/m/Y H:i") }} +

+

+ Fin = {{ end|date("d/m/Y H:i") }} +

+

+ Durée = {{ duration }} +

+

+ Type = Congé +

+

+ Lien pour valider = {{ valid_link }} +

+ +{% endautoescape %} +{% endblock %} + diff --git a/src/schedule-2.0/templates/Notif/validation.html.twig b/src/schedule-2.0/templates/Notif/validation.html.twig new file mode 100644 index 0000000..4a35676 --- /dev/null +++ b/src/schedule-2.0/templates/Notif/validation.html.twig @@ -0,0 +1,23 @@ +{% block body %} +{% autoescape %} +

VALIDATION

+

+ Utilisateur = {{ username }} +

+

+ Début = {{ start|date("d/m/Y H:i") }} +

+

+ Fin = {{ end|date("d/m/Y H:i") }} +

+

+ Durée = {{ duration }} +

+

+ Type = Congé +

+ + +{% endautoescape %} +{% endblock %} + From 6b00cec84b9e7bfcc64518ef49e9d5f33adb2df8 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 12 Jun 2020 15:29:27 +0200 Subject: [PATCH 05/63] =?UTF-8?q?resolution=20cumul=20sur=20total=20planif?= =?UTF-8?q?i=C3=A9=20(ref=20#4)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/schedule-2.0/templates/Project/list.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/schedule-2.0/templates/Project/list.html.twig b/src/schedule-2.0/templates/Project/list.html.twig index 7c8d114..6a8571b 100644 --- a/src/schedule-2.0/templates/Project/list.html.twig +++ b/src/schedule-2.0/templates/Project/list.html.twig @@ -89,7 +89,7 @@ {% for task in project.tasks %} {% set tottask=tottask+task.quantity %} - {% set totvalidate=totvalidate+task.validate %} + {% set totplanified=totplanified+task.validate %} {% for event in task.events %} {% set totplanified=totplanified+event.duration %} From efa4f1fc62c8755adb4af1a328bcbc26c419e3cc Mon Sep 17 00:00:00 2001 From: Matthieu Lamalle Date: Fri, 12 Jun 2020 16:58:23 +0200 Subject: [PATCH 06/63] =?UTF-8?q?Envoie=20des=20notifications=20=C3=A0=20t?= =?UTF-8?q?ous=20les=20valideurs,=20et=20variable=20pour=20messagerie=20gl?= =?UTF-8?q?obale=20de=20notification?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dicos/25_schedule.xml | 1 + src/schedule-2.0/.env | 1 + src/schedule-2.0/config/services.yaml | 1 + .../src/Service/notificationService.php | 41 +++++++++++++++---- tmpl/schedule-env.local | 6 +++ 5 files changed, 41 insertions(+), 9 deletions(-) diff --git a/dicos/25_schedule.xml b/dicos/25_schedule.xml index fc07576..e4a3ff2 100644 --- a/dicos/25_schedule.xml +++ b/dicos/25_schedule.xml @@ -32,6 +32,7 @@ + diff --git a/src/schedule-2.0/.env b/src/schedule-2.0/.env index 3c5f4b5..c784546 100644 --- a/src/schedule-2.0/.env +++ b/src/schedule-2.0/.env @@ -36,6 +36,7 @@ APP_CRON=false MAILER_METHOD=sendmail MAILER_URL= MAILER_NOREPLY=noreply@noreply.fr +MAILER_DEFAULT_NOTIF= # BDD DATABASE_NAME= diff --git a/src/schedule-2.0/config/services.yaml b/src/schedule-2.0/config/services.yaml index 16a1acd..29a975b 100644 --- a/src/schedule-2.0/config/services.yaml +++ b/src/schedule-2.0/config/services.yaml @@ -11,6 +11,7 @@ parameters: appCron: '%env(resolve:APP_CRON)%' appMailmethod: '%env(resolve:MAILER_METHOD)%' appMailnoreply: '%env(resolve:MAILER_NOREPLY)%' + appMailnotif: '%env(resolve:MAILER_DEFAULT_NOTIF)%' casHost: '%env(resolve:CAS_HOST)%' casPort: '%env(resolve:CAS_PORT)%' casPath: '%env(resolve:CAS_PATH)%' diff --git a/src/schedule-2.0/src/Service/notificationService.php b/src/schedule-2.0/src/Service/notificationService.php index 4c70c68..1c754af 100644 --- a/src/schedule-2.0/src/Service/notificationService.php +++ b/src/schedule-2.0/src/Service/notificationService.php @@ -19,11 +19,27 @@ class notificationService public function sendNotifAttenteValid($subject, $iduser, $idevent, $valid_url) { $template = $this->twig->load('Notif/attentevalidation.html.twig'); - - $user=$this->em->getRepository("App:User")->find($iduser); $event=$this->em->getRepository("App:Event")->find($idevent); - + $users=$this->em->getRepository("App:User")->findAll(); + $tbemails=[]; + foreach($users as $usr) { + if(in_array("ROLE_VALIDATOR",$usr->getRoles())) { + array_push($tbemails,$usr->getEmail()); + } + // else{ + // if(in_array("ROLE_MASTER",$usr->getRoles())) { + // if ($usr->getService() == $user->getService() ){ + // $tmp=[ + // "id"=>$usr->getId(), + // "email"=>$usr->getEmail() + // ]; + // } + // array_push($tbemails,$tmp); + // } + // } + } + $parameters=[ 'date' => new \DateTime(), 'username' => $user->getUsername(), @@ -33,11 +49,12 @@ class notificationService 'valid_link' => $valid_url, ]; $bodyHtml = $template->renderBlock('body', $parameters); - + $message = (new \Swift_Message()) ->setFrom('schedule@cadoles.com') ->setSubject($user->getUsername() . " = " . $subject) - ->setTo('conges@cadoles.com') + //TODO envoyer à tt les users master associé au service de l'utilisateur et l'ensemble des user validator + ->setTo($tbemails) ->setBody($bodyHtml, 'text/html'); $response = $this->mailer->send($message); @@ -47,11 +64,16 @@ class notificationService public function sendNotifValid($subject, $iduser, $idevent) { $template = $this->twig->load('Notif/validation.html.twig'); - - $user=$this->em->getRepository("App:User")->find($iduser); $event=$this->em->getRepository("App:Event")->find($idevent); - + $users=$this->em->getRepository("App:User")->findAll(); + $tbemails=[]; + foreach($users as $usr) { + if(in_array("ROLE_VALIDATOR",$usr->getRoles())) { + array_push($tbemails,$usr->getEmail()); + } + + } $parameters=[ 'date' => new \DateTime(), 'username' => $user->getUsername(), @@ -64,7 +86,8 @@ class notificationService $message = (new \Swift_Message()) ->setFrom('schedule@cadoles.com') ->setSubject($user->getUsername() . " = " . $subject) - ->setTo('conges@cadoles.com') + ->setTo($this->container->getParameter('appMailnotif')) + ->setCc($tbemails) ->setBody($bodyHtml, 'text/html'); $response = $this->mailer->send($message); diff --git a/tmpl/schedule-env.local b/tmpl/schedule-env.local index 31f3ab6..7815fe1 100644 --- a/tmpl/schedule-env.local +++ b/tmpl/schedule-env.local @@ -4,6 +4,12 @@ APP_SECRET=%%pwdreader("","/var/www/html/schedule/.key") APP_AUTH=CAS +# MAIL sendmail / smtp +MAILER_METHOD=sendmail +MAILER_URL= +MAILER_NOREPLY=noreply@noreply.fr +MAILER_DEFAULT_NOTIF=%%getVar('schedule_email_global_notif', '') + # Bdd = Redefine local DATABASE_NAME=schedule DATABASE_USER=schedule From 79b8fb9af54884f2187fdef2ac05fa8ac0959827 Mon Sep 17 00:00:00 2001 From: Matthieu Lamalle Date: Tue, 16 Jun 2020 11:11:19 +0200 Subject: [PATCH 07/63] add dependencies --- src/schedule-2.0/composer.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/schedule-2.0/composer.json b/src/schedule-2.0/composer.json index 6d855bb..81bd9ec 100644 --- a/src/schedule-2.0/composer.json +++ b/src/schedule-2.0/composer.json @@ -33,6 +33,7 @@ "symfony/profiler-pack": "^1.0", "symfony/security-bundle": "4.4.*", "symfony/serializer-pack": "*", + "symfony/swiftmailer-bundle": "^3.4", "symfony/translation": "4.4.*", "symfony/twig-pack": "*", "symfony/validator": "4.4.*", From f94498110955a369bbd9aa68289445c112b6395d Mon Sep 17 00:00:00 2001 From: Matthieu Lamalle Date: Tue, 16 Jun 2020 11:26:03 +0200 Subject: [PATCH 08/63] Renommage Proposition en Commande --- src/schedule-2.0/src/Controller/ReportController.php | 2 +- src/schedule-2.0/templates/Offer/list.html.twig | 2 +- src/schedule-2.0/templates/base.html.twig | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/schedule-2.0/src/Controller/ReportController.php b/src/schedule-2.0/src/Controller/ReportController.php index d4b736b..de13693 100755 --- a/src/schedule-2.0/src/Controller/ReportController.php +++ b/src/schedule-2.0/src/Controller/ReportController.php @@ -571,7 +571,7 @@ class ReportController extends AbstractController $tbproject["beforeastreinte"][$penalty->getStart()->format("Ym")]["duration"]=$tbproject["beforeastreinte"][$penalty->getStart()->format("Ym")]["duration"]+$penalty->getDuration(); } - // Recap des propositions + // Recap des Commandes $offers=$em->getRepository("App:Offer")->findBy(["project"=>$project->getId()]); foreach($offers as $offer) { $tbproject["offers"][$offer->getId()] = [ diff --git a/src/schedule-2.0/templates/Offer/list.html.twig b/src/schedule-2.0/templates/Offer/list.html.twig index b4a65f2..99f9f02 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 %}

- PROPOSITIONS + COMMANDES

Ajouter diff --git a/src/schedule-2.0/templates/base.html.twig b/src/schedule-2.0/templates/base.html.twig index 0ba44a0..cbaf97b 100644 --- a/src/schedule-2.0/templates/base.html.twig +++ b/src/schedule-2.0/templates/base.html.twig @@ -401,7 +401,7 @@
  • - Propositions + Commandes
  • From 7edbdbd3e7f93f8fcad00caadde3c2b6ee425afa Mon Sep 17 00:00:00 2001 From: Matthieu Lamalle Date: Wed, 17 Jun 2020 14:48:18 +0200 Subject: [PATCH 09/63] =?UTF-8?q?pr=C3=A9sentaiton=20sous=20forme=20de=20t?= =?UTF-8?q?ableau=20des=20consommation=20pass=C3=A9=20dans=20les=20rapport?= =?UTF-8?q?s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/Controller/ReportController.php | 19 +++-- .../templates/Report/report.html.twig | 76 +++++++++++++------ 2 files changed, 60 insertions(+), 35 deletions(-) diff --git a/src/schedule-2.0/src/Controller/ReportController.php b/src/schedule-2.0/src/Controller/ReportController.php index de13693..e5f8fc7 100755 --- a/src/schedule-2.0/src/Controller/ReportController.php +++ b/src/schedule-2.0/src/Controller/ReportController.php @@ -533,16 +533,16 @@ class ReportController extends AbstractController ->orderBy('event.start') ->getQuery()->getResult(); foreach($events as $event) { - if(!isset($tbproject["before"][$event->getStart()->format("Ym")])) { - $tbproject["before"][$event->getStart()->format("Ym")] = [ + if(!isset($tbproject["before"][$event->getStart()->format("Y")][$event->getStart()->format("Ym")])) { + $tbproject["before"][$event->getStart()->format("Y")][$event->getStart()->format("Ym")] = [ "idmonth" => $event->getStart()->format("Ym"), "monthlabel"=>$event->getStart()->format("m/Y"), "duration" => 0, ]; - } - $tbproject["before"][$event->getStart()->format("Ym")]["duration"]=$tbproject["before"][$event->getStart()->format("Ym")]["duration"]+$event->getDuration(); + } + $tbproject["before"][$event->getStart()->format("Y")][$event->getStart()->format("Ym")]["duration"]=$tbproject["before"][$event->getStart()->format("Y")][$event->getStart()->format("Ym")]["duration"]+$event->getDuration(); } - + // Somme astreinte validé avant la date $end=new \Datetime('first day of this month'); $end->sub(new \DateInterval('P'.$nbmonth.'M')); @@ -561,14 +561,14 @@ class ReportController extends AbstractController ->orderBy('penalty.start') ->getQuery()->getResult(); foreach($penaltys as $penalty) { - if(!isset($tbproject["beforeastreinte"][$penalty->getStart()->format("Ym")])) { - $tbproject["beforeastreinte"][$penalty->getStart()->format("Ym")] = [ + if(!isset($tbproject["beforeastreinte"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("Ym")])) { + $tbproject["beforeastreinte"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("Ym")] = [ "idmonth" => $penalty->getStart()->format("Ym"), "monthlabel"=>$penalty->getStart()->format("m/Y"), "duration" => 0, ]; - } - $tbproject["beforeastreinte"][$penalty->getStart()->format("Ym")]["duration"]=$tbproject["beforeastreinte"][$penalty->getStart()->format("Ym")]["duration"]+$penalty->getDuration(); + } + $tbproject["beforeastreinte"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("Ym")]["duration"]=$tbproject["beforeastreinte"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("Ym")]["duration"]+$penalty->getDuration(); } // Recap des Commandes @@ -670,7 +670,6 @@ class ReportController extends AbstractController } $tbprojects[$project->getId()]=$tbproject; } - // Formater les utilisateurs $start=new \Datetime('first day of this month'); $start->sub(new \DateInterval('P'.$nbmonth.'M')); diff --git a/src/schedule-2.0/templates/Report/report.html.twig b/src/schedule-2.0/templates/Report/report.html.twig index d9a9cd3..55f5879 100644 --- a/src/schedule-2.0/templates/Report/report.html.twig +++ b/src/schedule-2.0/templates/Report/report.html.twig @@ -125,39 +125,65 @@
    -

    RAPPORT

    +

    RAPPORT

    +

    CONSOMMATION PASSEE

    {% if project.hors!=0 %} - consommé avant = {{ project.hors }}
    + Consommation précédente totale = {{ project.hors }}
    {% endif %} - {% set bycolonne = max(10,((project.before|length)/3)|round) %} - - {% set compteur = 0 %} + + {% for year in project.before %} + + + {% for month in year %} + + {% endfor %} + + + + {% for month in year %} + + {% endfor %} + + {% endfor %} +
    + Date + + {{ month.monthlabel }} +
    + Consommé + + {{ month.duration }} +
    -
    -
    - {% for month in project.before %} - {% set compteur = compteur + 1 %} - {% if compteur > bycolonne %} -
    -
    - {% set compteur = 1 %} - {% endif %} - consommé le {{ month.monthlabel }} = {{ month.duration }}
    - {% endfor %} -
    -
    -
    {% if not project.beforeastreinte is empty %} -

    ASTREINTE

    - {% set compteur = 0 %} -
    - {% for month in project.beforeastreinte %} - consommé le {{ month.monthlabel }} = {{ month.duration }}
    +

    ASTREINTES

    + + {% for year in project.before %} + + + {% for month in year %} + + {% endfor %} + + + + {% for month in year %} + + {% endfor %} + {% endfor %} - +
    + Date + + {{ month.monthlabel }} +
    + Consommé + + {{ month.duration }} +
    {% endif %}
     
    From 7f19e8c5ff669e6710062c9500fd49e877146e7b Mon Sep 17 00:00:00 2001 From: Matthieu Lamalle Date: Wed, 17 Jun 2020 17:32:19 +0200 Subject: [PATCH 10/63] Affichage cumul par semaines --- .../src/Controller/ReportController.php | 71 ++++++++++++++++++- 1 file changed, 70 insertions(+), 1 deletion(-) diff --git a/src/schedule-2.0/src/Controller/ReportController.php b/src/schedule-2.0/src/Controller/ReportController.php index e5f8fc7..8b4259a 100755 --- a/src/schedule-2.0/src/Controller/ReportController.php +++ b/src/schedule-2.0/src/Controller/ReportController.php @@ -513,6 +513,7 @@ class ReportController extends AbstractController "beforeastreinte"=>[], "months"=>[], "offers"=>[], + "weeks"=>[], ]; // Somme event validé avant la date @@ -571,6 +572,75 @@ class ReportController extends AbstractController $tbproject["beforeastreinte"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("Ym")]["duration"]=$tbproject["beforeastreinte"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("Ym")]["duration"]+$penalty->getDuration(); } + // Somme event validé par semaine + $start=new \Datetime('first day of this month'); + $start->sub(new \DateInterval('P'.$nbmonth.'M')); + $start->modify('previous monday'); + $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(); + + } + // Somme astreintes validé par semaine + $start=new \Datetime('first day of this month'); + $start->sub(new \DateInterval('P'.$nbmonth.'M')); + $start->modify('previous monday'); + $endmonth = new \Datetime('first day of this month'); + $endmonth->add(new \DateInterval('P1M')); + $endmonth->modify('next monday'); + + $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(); + } + // Recap des Commandes $offers=$em->getRepository("App:Offer")->findBy(["project"=>$project->getId()]); foreach($offers as $offer) { @@ -694,7 +764,6 @@ class ReportController extends AbstractController } } } - // Cumule foreach($tbprojects as $project) { foreach($project["months"] as $month) { From 5643360f9d3302f251d12fdc9739c461d2db5765 Mon Sep 17 00:00:00 2001 From: Matthieu Lamalle Date: Wed, 17 Jun 2020 17:32:32 +0200 Subject: [PATCH 11/63] modification mise en page du rapport --- .../templates/Report/report.html.twig | 143 +++++++++++------- 1 file changed, 85 insertions(+), 58 deletions(-) diff --git a/src/schedule-2.0/templates/Report/report.html.twig b/src/schedule-2.0/templates/Report/report.html.twig index 55f5879..45c5229 100644 --- a/src/schedule-2.0/templates/Report/report.html.twig +++ b/src/schedule-2.0/templates/Report/report.html.twig @@ -127,64 +127,7 @@

    RAPPORT

    -

    CONSOMMATION PASSEE

    - {% if project.hors!=0 %} - Consommation précédente totale = {{ project.hors }}
    - {% endif %} - - - {% for year in project.before %} - - - {% for month in year %} - - {% endfor %} - - - - {% for month in year %} - - {% endfor %} - - {% endfor %} -
    - Date - - {{ month.monthlabel }} -
    - Consommé - - {{ month.duration }} -
    - - {% if not project.beforeastreinte is empty %} -

    ASTREINTES

    - - {% for year in project.before %} - - - {% for month in year %} - - {% endfor %} - - - - {% for month in year %} - - {% endfor %} - - {% endfor %} -
    - Date - - {{ month.monthlabel }} -
    - Consommé - - {{ month.duration }} -
    - {% endif %}
     
    {% for month in project.months %} @@ -247,10 +190,37 @@ {% endif %} -
     
    + {% endfor %} + +

    CUMUL HEBDOMADAIRE

    + + {% for year, weeks in project.weeks %} + + + {% for week in weeks %} + + {% endfor %} + + + + {% for week in weeks %} + + {% endfor %} + + {% endfor %} +
    + {{ year}} + + S{{ week.weeknumber}} +
    + + + {{ week.cumul}} +
    +
     
    {% if not project.offers is empty %}

    COMMANDES

    {% set count=(project.offers|length)-8 %} @@ -360,7 +330,64 @@
     
    {% endif %} +

    CONSOMMATION PASSEE

    + {% if project.hors!=0 %} + Consommation précédente totale = {{ project.hors }}
    + {% endif %} + + + {% for year in project.before %} + + + {% for month in year %} + + {% endfor %} + + + + {% for month in year %} + + {% endfor %} + + {% endfor %} +
    + Date + + {{ month.monthlabel }} +
    + Consommé + + {{ month.duration }} +
    + + {% if not project.beforeastreinte is empty %} +

    ASTREINTES PASSEES

    + + {% for year in project.beforeastreinte %} + + + {% for month in year %} + + {% endfor %} + + + + {% for month in year %} + + {% endfor %} + + {% endfor %} +
    + Date + + {{ month.monthlabel }} +
    + Consommé + + {{ month.duration }} +
    + {% endif %}
    {% endif %} From 00fc14c91b16c6b3e675013d4ec5e63f770a0140 Mon Sep 17 00:00:00 2001 From: Matthieu Lamalle Date: Thu, 18 Jun 2020 10:36:09 +0200 Subject: [PATCH 12/63] affichage utilisateur sur calendrier --- src/schedule-2.0/src/Controller/EventController.php | 2 ++ src/schedule-2.0/templates/Event/list.html.twig | 11 +++++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/schedule-2.0/src/Controller/EventController.php b/src/schedule-2.0/src/Controller/EventController.php index bc3b5c1..411ba35 100755 --- a/src/schedule-2.0/src/Controller/EventController.php +++ b/src/schedule-2.0/src/Controller/EventController.php @@ -417,6 +417,7 @@ class EventController extends AbstractController "fulldescription" => ($event instanceof Penalty?"ASTREINTE\n":"").strtoupper($event->getTask()->getDisplayname())."\n\n".$event->getDescription(), "description" => $event->getDescription(), "userid" => $event->getUser()->getId(), + "username" => $event->getUser()->getUsername(), "taskid" => $event->getTask()->getId(), "avatar" => "/".$this->getParameter("appAlias")."/uploads/avatar/".$event->getUser()->getAvatar(), "estimate" => $event->getTask()->getDuration($event->getEnd())." / ".$event->getTask()->getQuantity(), @@ -446,6 +447,7 @@ class EventController extends AbstractController "fulldescription" => "Jour Férié", "description" => "Jour Férié", "userid" => null, + "username" => "", "taskid" => null, "avatar" => "/".$this->getParameter("appAlias")."/uploads/avatar/".$this->getUser()->getAvatar(), "estimate" => "", diff --git a/src/schedule-2.0/templates/Event/list.html.twig b/src/schedule-2.0/templates/Event/list.html.twig index 2599c58..4704c81 100644 --- a/src/schedule-2.0/templates/Event/list.html.twig +++ b/src/schedule-2.0/templates/Event/list.html.twig @@ -21,17 +21,17 @@ .fc-title { font-weight: bolder; - font-size: 14px; + font-size: 12px; } .eventAvatar { - width: 40px; + width: 20px; margin: 0px 5px 0px 0px; float: left; } .eventInfo{ - margin: -18px 5px 0px 0px; + margin: -5px 5px 0px 0px; clear: both; } @@ -215,12 +215,15 @@ $(document).ready(function() { // Rendu d'un évenement function eventRender(info) { + console.log(info.event.extendedProps); // Récupération des divers élements du rendu event var content=$(info.el).children('.fc-content'); var title=$(content).children('.fc-title'); // Ajouter l'avatar content.prepend(""); + content.append(""+info.event.extendedProps.username+""); + var eventInfo=$(content).children('.eventUser'); // Ajout container content.append(""); @@ -232,7 +235,7 @@ function eventRender(info) { } // Ajout estimation - eventInfo.append(""+info.event.extendedProps.estimate+""); + eventInfo.append(""+info.event.extendedProps.estimate+""); // Description content.attr("title",info.event.extendedProps.fulldescription); From ae78edf02fe97876918a0ecfaf4a874cfc057476 Mon Sep 17 00:00:00 2001 From: Matthieu Lamalle Date: Thu, 18 Jun 2020 11:09:37 +0200 Subject: [PATCH 13/63] correciton css pour affichage username calendrier --- src/schedule-2.0/templates/Event/list.html.twig | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/schedule-2.0/templates/Event/list.html.twig b/src/schedule-2.0/templates/Event/list.html.twig index 4704c81..8a87477 100644 --- a/src/schedule-2.0/templates/Event/list.html.twig +++ b/src/schedule-2.0/templates/Event/list.html.twig @@ -35,6 +35,10 @@ clear: both; } + .eventUser{ + clear: both; + } + .eventEstimate { margin: -3px 10px; } From dd4f03a00e534e5f2d018ab264ba7b9806df128f Mon Sep 17 00:00:00 2001 From: Matthieu Lamalle Date: Thu, 18 Jun 2020 11:41:36 +0200 Subject: [PATCH 14/63] =?UTF-8?q?correction=20sur=20la=20plage=20horaire?= =?UTF-8?q?=20de=20r=C3=A9cup=C3=A9ration=20des=20=C3=A9v=C3=A9nements?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/Controller/ReportController.php | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/schedule-2.0/src/Controller/ReportController.php b/src/schedule-2.0/src/Controller/ReportController.php index 8b4259a..1d48559 100755 --- a/src/schedule-2.0/src/Controller/ReportController.php +++ b/src/schedule-2.0/src/Controller/ReportController.php @@ -519,6 +519,7 @@ class ReportController extends AbstractController // Somme event validé avant la date $end=new \Datetime('first day of this month'); $end->sub(new \DateInterval('P'.$nbmonth.'M')); + $end->setTime(23,59,0); $events = $em ->createQueryBuilder('event') ->select('event') @@ -547,6 +548,7 @@ class ReportController extends AbstractController // Somme astreinte validé avant la date $end=new \Datetime('first day of this month'); $end->sub(new \DateInterval('P'.$nbmonth.'M')); + $end->setTime(23,59,0); $penaltys = $em ->createQueryBuilder('penalty') ->select('penalty') @@ -576,9 +578,11 @@ class ReportController extends AbstractController $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'); + $end->setTime(23,59,0); $eventsbyweek = $em ->createQueryBuilder('event') @@ -610,9 +614,11 @@ class ReportController extends AbstractController $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'); + $end->setTime(23,59,0); $penaltybyweek = $em @@ -654,9 +660,11 @@ class ReportController extends AbstractController // Formater les mois $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('P'.$nbmonth.'M')); $end->sub(new \DateInterval('P1D')); + $end->setTime(23,59,0); while($start<$end) { $tbproject["months"][$start->format("Ym")]=[ "monthid"=> $start->format("Ym"), @@ -743,9 +751,11 @@ class ReportController extends AbstractController // Formater les utilisateurs $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('P'.$nbmonth.'M')); $end->sub(new \DateInterval('P1D')); + $end->setTime(23,59,0); foreach($users as $user) { $tbevents = $this->getEventuser($user,$start,$end,true); @@ -829,7 +839,9 @@ class ReportController extends AbstractController private function getEventuser($user,$start,$end,$onlyvalidate) { $em = $this->getDoctrine()->getManager(); $tbevents=[]; - + dump($user->getId()); + dump($start); + dump($end); // Récupération de event $qb = $em ->createQueryBuilder('event') From 32c08bcb52d8fc54cc92a71ee9f658f1281935d9 Mon Sep 17 00:00:00 2001 From: Matthieu Lamalle Date: Thu, 18 Jun 2020 11:42:27 +0200 Subject: [PATCH 15/63] remove debug infos --- src/schedule-2.0/src/Controller/ReportController.php | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/schedule-2.0/src/Controller/ReportController.php b/src/schedule-2.0/src/Controller/ReportController.php index 1d48559..a4de755 100755 --- a/src/schedule-2.0/src/Controller/ReportController.php +++ b/src/schedule-2.0/src/Controller/ReportController.php @@ -839,9 +839,6 @@ class ReportController extends AbstractController private function getEventuser($user,$start,$end,$onlyvalidate) { $em = $this->getDoctrine()->getManager(); $tbevents=[]; - dump($user->getId()); - dump($start); - dump($end); // Récupération de event $qb = $em ->createQueryBuilder('event') From 7fbed84998ffec5dcd0fed622e2572ef1228c918 Mon Sep 17 00:00:00 2001 From: Matthieu Lamalle Date: Fri, 19 Jun 2020 11:56:33 +0200 Subject: [PATCH 16/63] Ajout d'un export csv hebdomadaire sur les rapports --- src/schedule-2.0/config/routes.yaml | 4 + .../src/Controller/ReportController.php | 171 +++++++++++++----- .../templates/Report/export.csv.twig | 15 ++ .../templates/Report/report.html.twig | 8 +- 4 files changed, 151 insertions(+), 47 deletions(-) create mode 100644 src/schedule-2.0/templates/Report/export.csv.twig diff --git a/src/schedule-2.0/config/routes.yaml b/src/schedule-2.0/config/routes.yaml index 114088d..079aadb 100644 --- a/src/schedule-2.0/config/routes.yaml +++ b/src/schedule-2.0/config/routes.yaml @@ -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 } diff --git a/src/schedule-2.0/src/Controller/ReportController.php b/src/schedule-2.0/src/Controller/ReportController.php index a4de755..92fc54b 100755 --- a/src/schedule-2.0/src/Controller/ReportController.php +++ b/src/schedule-2.0/src/Controller/ReportController.php @@ -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"); @@ -102,7 +102,7 @@ class ReportController extends AbstractController $tmp["events"][$idday]["allday"]=true; $tmp["events"][$idday]["colorday"]=$event->getTask()->getColor(); $tmp["events"][$idday]["descriptionday"]=strtoupper($event->getTask()->getDisplayname())."\n\n".$event->getDescription(); - } + } else { // Matin ou après-midi ? $time=$event->getStart()->format("H"); @@ -119,7 +119,7 @@ class ReportController extends AbstractController } $st->add(new \DateInterval('P1D')); - } + } } // On formate le tableau des astreintes @@ -157,7 +157,7 @@ class ReportController extends AbstractController } $st->add(new \DateInterval('P1D')); - } + } } // On formate le tableau des jours fériés @@ -184,7 +184,7 @@ class ReportController extends AbstractController $tmp["events"][$idday]["descriptionday"]="Jour Férié"; $st->add(new \DateInterval('P1D')); - } + } } array_push($tbevents,$tmp); @@ -202,9 +202,9 @@ class ReportController extends AbstractController return new PdfResponse( $this->knpSnappy->getOutputFromHtml($render), 'synthese.pdf' - ); + ); } - else { + else { return $this->render('Report/synthese.html.twig',[ "useheader" => true, "usesidebar" => ($this->getUser()), @@ -246,7 +246,7 @@ class ReportController extends AbstractController 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; @@ -350,7 +350,7 @@ class ReportController extends AbstractController $end=new \Datetime('first day of this month'); $end->add(new \DateInterval('P'.$nbmonth.'M')); $end->sub(new \DateInterval('P1D')); - + foreach($users as $user) { $tbevents = $this->getEventuser($user,$start,$end,false); @@ -368,7 +368,7 @@ class ReportController extends AbstractController } } } - + // Cumule foreach($tbprojects as $project) { foreach($project["months"] as $month) { @@ -387,7 +387,7 @@ class ReportController extends AbstractController $totmonth+=$day["duration"]; $totmontha+=$day["astreinte"]; } - + if($totuser==0&&$totusera==0) { unset($tbprojects[$project["id"]]["months"][$month["monthid"]]["users"][$user["id"]]); } else { @@ -398,7 +398,7 @@ class ReportController extends AbstractController if(!$haveuser) unset($tbprojects[$project["id"]]["months"][$month["monthid"]]); - else { + else { $tbprojects[$project["id"]]["months"][$month["monthid"]]["total"]=$totmonth; $tbprojects[$project["id"]]["months"][$month["monthid"]]["totala"]=$totmontha; } @@ -418,9 +418,9 @@ class ReportController extends AbstractController return new PdfResponse( $this->knpSnappy->getOutputFromHtml($render,["orientation"=>"Landscape"]), 'planning.pdf' - ); + ); } - else { + else { return $this->render('Report/planning.html.twig',[ "useheader" => true, "usesidebar" => ($this->getUser()), @@ -428,7 +428,7 @@ class ReportController extends AbstractController "access" => $access, "key" => $key ]); - } + } } public function report($key=null,$access=null,Request $request) { @@ -447,7 +447,7 @@ class ReportController extends AbstractController } $projects=$em->getRepository("App:Project")->findAll(); - + //Construction du tableau des projets $tbprojects=[]; foreach($projects as $project) { @@ -468,7 +468,7 @@ class ReportController extends AbstractController 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; @@ -541,10 +541,10 @@ class ReportController extends AbstractController "monthlabel"=>$event->getStart()->format("m/Y"), "duration" => 0, ]; - } + } $tbproject["before"][$event->getStart()->format("Y")][$event->getStart()->format("Ym")]["duration"]=$tbproject["before"][$event->getStart()->format("Y")][$event->getStart()->format("Ym")]["duration"]+$event->getDuration(); } - + // Somme astreinte validé avant la date $end=new \Datetime('first day of this month'); $end->sub(new \DateInterval('P'.$nbmonth.'M')); @@ -570,10 +570,10 @@ class ReportController extends AbstractController "monthlabel"=>$penalty->getStart()->format("m/Y"), "duration" => 0, ]; - } + } $tbproject["beforeastreinte"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("Ym")]["duration"]=$tbproject["beforeastreinte"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("Ym")]["duration"]+$penalty->getDuration(); } - + // Somme event validé par semaine $start=new \Datetime('first day of this month'); $start->sub(new \DateInterval('P'.$nbmonth.'M')); @@ -583,7 +583,7 @@ class ReportController extends AbstractController $endmonth->add(new \DateInterval('P1M')); $endmonth->modify('next monday'); $end->setTime(23,59,0); - + $eventsbyweek = $em ->createQueryBuilder('event') ->select('event') @@ -619,7 +619,7 @@ class ReportController extends AbstractController $endmonth->add(new \DateInterval('P1M')); $endmonth->modify('next monday'); $end->setTime(23,59,0); - + $penaltybyweek = $em ->createQueryBuilder('penalty') @@ -646,7 +646,7 @@ class ReportController extends AbstractController } $tbproject["weeks"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("W")]["cumul"] = $tbproject["weeks"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("W")]["cumul"]+$penalty->getDuration(); } - + // Recap des Commandes $offers=$em->getRepository("App:Offer")->findBy(["project"=>$project->getId()]); foreach($offers as $offer) { @@ -655,7 +655,7 @@ class ReportController extends AbstractController "ref"=>$offer->getRef(), "quantity"=>$offer->getQuantity(), ]; - } + } // Formater les mois $start=new \Datetime('first day of this month'); @@ -712,7 +712,7 @@ class ReportController extends AbstractController ]; $tbproject["months"][$start->format("Ym")]["tasks"][$event["id"]]=$tbtask; } - + $start->add(new \DateInterval('P1M')); } @@ -756,7 +756,7 @@ class ReportController extends AbstractController $end->add(new \DateInterval('P'.$nbmonth.'M')); $end->sub(new \DateInterval('P1D')); $end->setTime(23,59,0); - + foreach($users as $user) { $tbevents = $this->getEventuser($user,$start,$end,true); @@ -792,7 +792,7 @@ class ReportController extends AbstractController $totmonth+=$day["duration"]; $totmontha+=$day["astreinte"]; } - + if($totuser==0&&$totusera==0) { unset($tbprojects[$project["id"]]["months"][$month["monthid"]]["users"][$user["id"]]); } else { @@ -803,7 +803,7 @@ class ReportController extends AbstractController if(!$haveuser) unset($tbprojects[$project["id"]]["months"][$month["monthid"]]); - else { + else { $tbprojects[$project["id"]]["months"][$month["monthid"]]["total"]=$totmonth; $tbprojects[$project["id"]]["months"][$month["monthid"]]["totala"]=$totmontha; } @@ -823,9 +823,9 @@ class ReportController extends AbstractController return new PdfResponse( $this->knpSnappy->getOutputFromHtml($render,["orientation"=>"Landscape"]), 'report.pdf' - ); + ); } - else { + else { return $this->render('Report/report.html.twig',[ "useheader" => true, "usesidebar" => ($this->getUser()), @@ -833,7 +833,7 @@ class ReportController extends AbstractController "access" => $access, "key" => $key ]); - } + } } private function getEventuser($user,$start,$end,$onlyvalidate) { @@ -850,7 +850,7 @@ class ReportController extends AbstractController ->setParameter('end',$end); if($onlyvalidate) $qb->andWhere('event.validate=:validate')->setParameter('validate',true); - + $events=$qb->getQuery()->getResult(); foreach($events as $event) { $project=$event->getTask()->getProject(); @@ -869,14 +869,14 @@ class ReportController extends AbstractController if($idproject!=$this->get('session')->get('idproject')) continue; } - + // Ne prendre que les projets actif/inactif if($this->get('session')->get('activeproject')!=$activeproject) continue; if(!isset($tbevents[$idproject])) $tbevents[$idproject] = []; - + $st=clone $event->getStart(); while($st<$event->getEnd()) { $idday=$st->format("Ymd"); @@ -897,7 +897,7 @@ class ReportController extends AbstractController $st->add(new \DateInterval('P1D')); - } + } } @@ -912,7 +912,7 @@ class ReportController extends AbstractController ->setParameter('end',$end); if($onlyvalidate) $qb->andWhere('penalty.validate=:validate')->setParameter('validate',true); - + $penaltys=$qb->getQuery()->getResult(); foreach($penaltys as $penalty) { $project=$penalty->getTask()->getProject(); @@ -931,14 +931,14 @@ class ReportController extends AbstractController if($idproject!=$this->get('session')->get('idproject')) continue; } - + // Ne prendre que les projets actif/inactif if($this->get('session')->get('activeproject')!=$activeproject) continue; if(!isset($tbevents[$idproject])) $tbevents[$idproject] = []; - + $st=clone $penalty->getStart(); while($st<$penalty->getEnd()) { $idday=$st->format("Ymd"); @@ -959,7 +959,7 @@ class ReportController extends AbstractController $st->add(new \DateInterval('P1D')); - } + } } return $tbevents; @@ -968,7 +968,7 @@ class ReportController extends AbstractController public function holiday(Request $request) { $em = $this->getDoctrine()->getManager(); - + $iduser=$this->getUser(); $users=$em->getRepository("App:User")->findBy(["id"=>$iduser]); @@ -1017,13 +1017,13 @@ class ReportController extends AbstractController "useheader" => true, "usesidebar" => ($this->getUser()), "users" => $tbevents, - "fgprint" => $request->query->get('fgprint'), + "fgprint" => $request->query->get('fgprint'), ]); return new PdfResponse( $this->knpSnappy->getOutputFromHtml($render), 'conges.pdf' - ); + ); } else { return $this->render('Report/holiday.html.twig',[ @@ -1031,15 +1031,93 @@ 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')); - + return $this->redirectToRoute("app_holiday"); - } + } private function frmDay($daynumber) { switch($daynumber) { @@ -1065,3 +1143,4 @@ class ReportController extends AbstractController } } } + diff --git a/src/schedule-2.0/templates/Report/export.csv.twig b/src/schedule-2.0/templates/Report/export.csv.twig new file mode 100644 index 0000000..97ec932 --- /dev/null +++ b/src/schedule-2.0/templates/Report/export.csv.twig @@ -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 %} \ No newline at end of file diff --git a/src/schedule-2.0/templates/Report/report.html.twig b/src/schedule-2.0/templates/Report/report.html.twig index 45c5229..082a666 100644 --- a/src/schedule-2.0/templates/Report/report.html.twig +++ b/src/schedule-2.0/templates/Report/report.html.twig @@ -93,7 +93,6 @@ {% block body %} {% if fgprint is defined and fgprint %}

    Planning

    {%endif%} - {% if access=="customer" and not app.user %}
    @@ -112,6 +111,13 @@
    {% endif %} + {% if access!="customer" and app.user %} +
    +
    + Exporter2 +
    +
    + {% 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 %}
    From ee6601bc35ed828a81ea86d634c9efbba445fe93 Mon Sep 17 00:00:00 2001 From: Matthieu Lamalle Date: Fri, 19 Jun 2020 13:54:14 +0200 Subject: [PATCH 17/63] add penalty to export --- .../src/Controller/ReportController.php | 39 ++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/src/schedule-2.0/src/Controller/ReportController.php b/src/schedule-2.0/src/Controller/ReportController.php index 92fc54b..b386544 100755 --- a/src/schedule-2.0/src/Controller/ReportController.php +++ b/src/schedule-2.0/src/Controller/ReportController.php @@ -610,7 +610,7 @@ class ReportController extends AbstractController $tbproject["weeks"][$event->getStart()->format("Y")][$event->getStart()->format("W")]["cumul"] = $tbproject["weeks"][$event->getStart()->format("Y")][$event->getStart()->format("W")]["cumul"]+$event->getDuration(); } - // Somme astreintes validé par semaine + // Somme astreintes validé par semaine $start=new \Datetime('first day of this month'); $start->sub(new \DateInterval('P'.$nbmonth.'M')); $start->modify('previous monday'); @@ -1074,6 +1074,7 @@ class ReportController extends AbstractController $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') @@ -1102,6 +1103,42 @@ class ReportController extends AbstractController $tbproject["weeks"][$event->getStart()->format("Y")][$event->getStart()->format("W")]["cumul"] = $tbproject["weeks"][$event->getStart()->format("Y")][$event->getStart()->format("W")]["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(); + } $tbprojects[$project->getId()]=$tbproject; } From 19889197ceb5db64ab7ef5a8a41d7b7ee8b2b8d8 Mon Sep 17 00:00:00 2001 From: Matthieu Lamalle Date: Fri, 26 Jun 2020 11:54:01 +0200 Subject: [PATCH 18/63] update comoser.lock --- src/schedule-2.0/composer.lock | 129 ++++++++++++++++++++++++++++++++- 1 file changed, 128 insertions(+), 1 deletion(-) diff --git a/src/schedule-2.0/composer.lock b/src/schedule-2.0/composer.lock index 13cf066..4f8643b 100644 --- a/src/schedule-2.0/composer.lock +++ b/src/schedule-2.0/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "24b27b5f4efd6efcabe5c89e1e1ac51b", + "content-hash": "1be2a2e3a398eb23cd3c3e26bc75c090", "packages": [ { "name": "doctrine/annotations", @@ -2557,6 +2557,68 @@ ], "time": "2019-12-27T08:57:19+00:00" }, + { + "name": "swiftmailer/swiftmailer", + "version": "v6.2.3", + "source": { + "type": "git", + "url": "https://github.com/swiftmailer/swiftmailer.git", + "reference": "149cfdf118b169f7840bbe3ef0d4bc795d1780c9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/149cfdf118b169f7840bbe3ef0d4bc795d1780c9", + "reference": "149cfdf118b169f7840bbe3ef0d4bc795d1780c9", + "shasum": "" + }, + "require": { + "egulias/email-validator": "~2.0", + "php": ">=7.0.0", + "symfony/polyfill-iconv": "^1.0", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "require-dev": { + "mockery/mockery": "~0.9.1", + "symfony/phpunit-bridge": "^3.4.19|^4.1.8" + }, + "suggest": { + "ext-intl": "Needed to support internationalized email addresses", + "true/punycode": "Needed to support internationalized email addresses, if ext-intl is not installed" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.2-dev" + } + }, + "autoload": { + "files": [ + "lib/swift_required.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Corbyn" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Swiftmailer, free feature-rich PHP mailer", + "homepage": "https://swiftmailer.symfony.com", + "keywords": [ + "email", + "mail", + "mailer" + ], + "time": "2019-11-12T09:31:26+00:00" + }, { "name": "symfony/apache-pack", "version": "v1.0.1", @@ -5811,6 +5873,71 @@ "homepage": "https://symfony.com", "time": "2020-01-04T13:00:46+00:00" }, + { + "name": "symfony/swiftmailer-bundle", + "version": "v3.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/swiftmailer-bundle.git", + "reference": "553d2474288349faed873da8ab7c1551a00d26ae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/swiftmailer-bundle/zipball/553d2474288349faed873da8ab7c1551a00d26ae", + "reference": "553d2474288349faed873da8ab7c1551a00d26ae", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "swiftmailer/swiftmailer": "^6.1.3", + "symfony/config": "^4.3.8|^5.0", + "symfony/dependency-injection": "^4.3.8|^5.0", + "symfony/http-kernel": "^4.3.8|^5.0" + }, + "conflict": { + "twig/twig": "<1.41|<2.10" + }, + "require-dev": { + "symfony/console": "^4.3.8|^5.0", + "symfony/framework-bundle": "^4.3.8|^5.0", + "symfony/phpunit-bridge": "^4.3.8|^5.0", + "symfony/yaml": "^4.3.8|^5.0" + }, + "suggest": { + "psr/log": "Allows logging" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bundle\\SwiftmailerBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + } + ], + "description": "Symfony SwiftmailerBundle", + "homepage": "http://symfony.com", + "time": "2019-11-14T16:18:31+00:00" + }, { "name": "symfony/templating", "version": "v4.4.5", From 5a4e0c6c0b2f71aa8b5e7ed720567556e260ea8a Mon Sep 17 00:00:00 2001 From: Matthieu Lamalle Date: Fri, 26 Jun 2020 11:57:09 +0200 Subject: [PATCH 19/63] typo --- src/schedule-2.0/templates/Report/report.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/schedule-2.0/templates/Report/report.html.twig b/src/schedule-2.0/templates/Report/report.html.twig index 082a666..4796074 100644 --- a/src/schedule-2.0/templates/Report/report.html.twig +++ b/src/schedule-2.0/templates/Report/report.html.twig @@ -114,7 +114,7 @@ {% if access!="customer" and app.user %} {% endif %} From 6452f94cfe0365f43edf2ef844cdd6fc8aefda0e Mon Sep 17 00:00:00 2001 From: Matthieu Lamalle Date: Mon, 27 Jul 2020 15:22:16 +0200 Subject: [PATCH 20/63] Rapport hebdo par utilisateur --- .../src/Controller/ReportController.php | 78 ++++++++++++++++++- .../templates/Report/export.csv.twig | 15 ++-- 2 files changed, 82 insertions(+), 11 deletions(-) diff --git a/src/schedule-2.0/src/Controller/ReportController.php b/src/schedule-2.0/src/Controller/ReportController.php index b386544..8319f64 100755 --- a/src/schedule-2.0/src/Controller/ReportController.php +++ b/src/schedule-2.0/src/Controller/ReportController.php @@ -608,8 +608,27 @@ class ReportController extends AbstractController ]; } $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(); + } + // Somme astreintes validé par semaine $start=new \Datetime('first day of this month'); $start->sub(new \DateInterval('P'.$nbmonth.'M')); @@ -646,6 +665,24 @@ class ReportController extends AbstractController } $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 $penaltybyweek) { + 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(); + } // Recap des Commandes $offers=$em->getRepository("App:Offer")->findBy(["project"=>$project->getId()]); @@ -1103,6 +1140,24 @@ class ReportController extends AbstractController $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(); + } // Somme astreintes validé par semaine $start=new \Datetime('first day of this month'); $start->sub(new \DateInterval('P'.$nbmonth.'M')); @@ -1139,13 +1194,32 @@ class ReportController extends AbstractController } $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(); + } + $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"'); + //$response->headers->set('Content-Disposition', 'attachment; filename="export.csv"'); return $response; } diff --git a/src/schedule-2.0/templates/Report/export.csv.twig b/src/schedule-2.0/templates/Report/export.csv.twig index 97ec932..c1a5a81 100644 --- a/src/schedule-2.0/templates/Report/export.csv.twig +++ b/src/schedule-2.0/templates/Report/export.csv.twig @@ -1,15 +1,12 @@ {% block body %} +Projet;Utilisateur;Année;Semaine;Cumul; {% 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 %} - +{% for year,weeks in project.weeks_by_name %} +{% for week in weeks %} +{% for user in week.users%} +{{project.projectname}};{{user.displayname}};{{year}};S{{week.weeknumber}};{{user.cumul}}; +{% endfor %} {% endfor %} {% endfor %} - {% endfor %} {% endblock %} \ No newline at end of file From 25f78e3f34f7347912ca6afc2184e02537cb9766 Mon Sep 17 00:00:00 2001 From: Matthieu Lamalle Date: Tue, 28 Jul 2020 09:41:34 +0200 Subject: [PATCH 21/63] set correct report format --- src/schedule-2.0/src/Controller/ReportController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/schedule-2.0/src/Controller/ReportController.php b/src/schedule-2.0/src/Controller/ReportController.php index 8319f64..76bf981 100755 --- a/src/schedule-2.0/src/Controller/ReportController.php +++ b/src/schedule-2.0/src/Controller/ReportController.php @@ -1219,7 +1219,7 @@ class ReportController extends AbstractController $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"'); + $response->headers->set('Content-Disposition', 'attachment; filename="export.csv"'); return $response; } From d92e1d8d5ca716ee3b95c004d27e681dc1d06dcc Mon Sep 17 00:00:00 2001 From: Matthieu Lamalle Date: Tue, 28 Jul 2020 10:36:44 +0200 Subject: [PATCH 22/63] =?UTF-8?q?rapport=20hebdomadaire,=20par=20projet,?= =?UTF-8?q?=20t=C3=A2che=20et=20utilisateur?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/Controller/ReportController.php | 161 +++++++++++++----- .../templates/Report/export.csv.twig | 10 +- 2 files changed, 122 insertions(+), 49 deletions(-) diff --git a/src/schedule-2.0/src/Controller/ReportController.php b/src/schedule-2.0/src/Controller/ReportController.php index 76bf981..735d4f4 100755 --- a/src/schedule-2.0/src/Controller/ReportController.php +++ b/src/schedule-2.0/src/Controller/ReportController.php @@ -610,25 +610,48 @@ class ReportController extends AbstractController $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; - } + // 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(); - } - + // $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')); @@ -1130,33 +1153,57 @@ class ReportController extends AbstractController ->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"][$event->getStart()->format("Y")][$event->getStart()->format("W")])){ - $tbproject["weeks"][$event->getStart()->format("Y")][$event->getStart()->format("W")] = [ + 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"), - "cumul" => 0, + "tasks" => [], ]; } - $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"), + 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_name"][$event->getStart()->format("Y")][$event->getStart()->format("W")]["users"][$event->getUser()->getId()])){ + 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_name"][$event->getStart()->format("Y")][$event->getStart()->format("W")]["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()] = $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(); + + $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'); @@ -1185,32 +1232,56 @@ class ReportController extends AbstractController ->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"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("W")])){ - $tbproject["weeks"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("W")] = [ + 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"), - "cumul" => 0, + "tasks" => [], ]; } - $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"), + 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_name"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("W")]["users"][$penalty->getUser()->getId()])){ + 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_name"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("W")]["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()] = $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(); + + $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; diff --git a/src/schedule-2.0/templates/Report/export.csv.twig b/src/schedule-2.0/templates/Report/export.csv.twig index c1a5a81..6e75a0d 100644 --- a/src/schedule-2.0/templates/Report/export.csv.twig +++ b/src/schedule-2.0/templates/Report/export.csv.twig @@ -1,10 +1,12 @@ {% block body %} -Projet;Utilisateur;Année;Semaine;Cumul; +Projet;Tâche;Utilisateur;Année;Semaine;Cumul; {% for project in projects %} -{% for year,weeks in project.weeks_by_name %} +{% for year,weeks in project.weeks_by_task_by_user %} {% for week in weeks %} -{% for user in week.users%} -{{project.projectname}};{{user.displayname}};{{year}};S{{week.weeknumber}};{{user.cumul}}; +{% for task in week.tasks%} +{% for user in task.users%} +{{project.projectname}};{{task.taskname}};{{user.displayname}};{{year}};S{{week.weeknumber}};{{user.cumul|replace({".": ","})}}; +{% endfor %} {% endfor %} {% endfor %} {% endfor %} From 0ee945eed3cd2d30b06005afe7453ffecc0fa3cd Mon Sep 17 00:00:00 2001 From: Matthieu Lamalle Date: Tue, 28 Jul 2020 10:44:00 +0200 Subject: [PATCH 23/63] update report csv format --- src/schedule-2.0/src/Controller/ReportController.php | 2 ++ src/schedule-2.0/templates/Report/export.csv.twig | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/schedule-2.0/src/Controller/ReportController.php b/src/schedule-2.0/src/Controller/ReportController.php index 735d4f4..7dcc188 100755 --- a/src/schedule-2.0/src/Controller/ReportController.php +++ b/src/schedule-2.0/src/Controller/ReportController.php @@ -1126,6 +1126,8 @@ class ReportController extends AbstractController $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')); diff --git a/src/schedule-2.0/templates/Report/export.csv.twig b/src/schedule-2.0/templates/Report/export.csv.twig index 6e75a0d..5ccce07 100644 --- a/src/schedule-2.0/templates/Report/export.csv.twig +++ b/src/schedule-2.0/templates/Report/export.csv.twig @@ -1,11 +1,11 @@ {% block body %} -Projet;Tâche;Utilisateur;Année;Semaine;Cumul; +Client;Projet;Tâche;Utilisateur;Année;Semaine;Cumul; {% for project in projects %} {% for year,weeks in project.weeks_by_task_by_user %} {% for week in weeks %} {% for task in week.tasks%} {% for user in task.users%} -{{project.projectname}};{{task.taskname}};{{user.displayname}};{{year}};S{{week.weeknumber}};{{user.cumul|replace({".": ","})}}; +{{project.customer}};{{project.name}};{{task.taskname}};{{user.displayname}};{{year}};S{{week.weeknumber}};{{user.cumul|replace({".": ","})}}; {% endfor %} {% endfor %} {% endfor %} From 0ba2f94521fd868fc4980af3419e524afa6e0be3 Mon Sep 17 00:00:00 2001 From: Matthieu Lamalle Date: Thu, 30 Jul 2020 09:04:28 +0200 Subject: [PATCH 24/63] add spacing to navbar at bottom --- src/schedule-2.0/templates/base.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/schedule-2.0/templates/base.html.twig b/src/schedule-2.0/templates/base.html.twig index cbaf97b..94bb942 100644 --- a/src/schedule-2.0/templates/base.html.twig +++ b/src/schedule-2.0/templates/base.html.twig @@ -256,7 +256,7 @@ {% set contentsidebar="contentsidebar" %} -
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    -
    + +

    +
    +
    + Affectations +
    + +
    + + + + + + + + + {% for userproject in user.userprojects %} + + + + + {% endfor %} + +
    ProjetRôle
    {{userproject.project.displayname}}{{userproject.job.name}}
    + +
    +
    {{ form_end(form) }} From f183d744cc382d5a6ed01bc2bdbeb8f3ec44325f Mon Sep 17 00:00:00 2001 From: Matthieu Lamalle Date: Thu, 30 Jul 2020 10:56:21 +0200 Subject: [PATCH 45/63] correction externaltrip si penalty --- src/schedule-2.0/src/Controller/EventController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/schedule-2.0/src/Controller/EventController.php b/src/schedule-2.0/src/Controller/EventController.php index e944d91..f54d1c1 100755 --- a/src/schedule-2.0/src/Controller/EventController.php +++ b/src/schedule-2.0/src/Controller/EventController.php @@ -482,7 +482,7 @@ class EventController extends AbstractController "textColor" => "#ffffff", "allDay" => $event->getAllday(), "holiday" => $event->getTask()->getNature()->getIsvacation(), - "externaltrip" => $event->getExternalTrip(), + "externaltrip" => ($event instanceof Penalty?$event->getExternalTrip():false), "editable" => $editable, "durationEditable" => false, "extendedProps" => [ From 1f2b36b7fd42315fff890f16a63633424e68bb78 Mon Sep 17 00:00:00 2001 From: Matthieu Lamalle Date: Fri, 31 Jul 2020 10:43:51 +0200 Subject: [PATCH 46/63] correction bug affiche external trip --- src/schedule-2.0/src/Controller/EventController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/schedule-2.0/src/Controller/EventController.php b/src/schedule-2.0/src/Controller/EventController.php index f54d1c1..57db4c4 100755 --- a/src/schedule-2.0/src/Controller/EventController.php +++ b/src/schedule-2.0/src/Controller/EventController.php @@ -482,7 +482,7 @@ class EventController extends AbstractController "textColor" => "#ffffff", "allDay" => $event->getAllday(), "holiday" => $event->getTask()->getNature()->getIsvacation(), - "externaltrip" => ($event instanceof Penalty?$event->getExternalTrip():false), + "externaltrip" => ($event instanceof Penalty?false:$event->getExternalTrip()), "editable" => $editable, "durationEditable" => false, "extendedProps" => [ From c6ade61a080dbd72fe27c272d92ec361dbb6eb11 Mon Sep 17 00:00:00 2001 From: Matthieu Lamalle Date: Thu, 30 Jul 2020 14:31:42 +0200 Subject: [PATCH 47/63] Ajout d'une page unique pour les exports --- src/schedule-2.0/config/routes.yaml | 23 +- .../src/Controller/ExportController.php | 274 ++++++++++++++++++ .../src/Controller/ReportController.php | 202 ------------- .../src/Controller/TimerController.php | 36 +-- .../export_penalty_additional.csv.twig} | 1 - .../export_project_weekly.csv.twig} | 0 .../templates/Export/list.html.twig | 24 ++ .../templates/Report/report.html.twig | 7 - .../templates/Timer/list.html.twig | 1 - src/schedule-2.0/templates/base.html.twig | 8 +- 10 files changed, 321 insertions(+), 255 deletions(-) create mode 100644 src/schedule-2.0/src/Controller/ExportController.php rename src/schedule-2.0/templates/{Timer/export.csv.twig => Export/export_penalty_additional.csv.twig} (90%) rename src/schedule-2.0/templates/{Report/export.csv.twig => Export/export_project_weekly.csv.twig} (100%) create mode 100644 src/schedule-2.0/templates/Export/list.html.twig diff --git a/src/schedule-2.0/config/routes.yaml b/src/schedule-2.0/config/routes.yaml index eb0afd7..81223d7 100644 --- a/src/schedule-2.0/config/routes.yaml +++ b/src/schedule-2.0/config/routes.yaml @@ -288,10 +288,6 @@ 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 } @@ -393,9 +389,6 @@ app_timer_delete: path: /timer/delete/{id} defaults: { _controller: App\Controller\TimerController:delete } -app_timer_export_activepenalty: - path: /timer/export - defaults: { _controller: App\Controller\TimerController:export } #== Customer ====================================================================================================== app_customer_report: @@ -404,7 +397,21 @@ app_customer_report: app_customer_planning: path: /customer/planning/{key} - defaults: { _controller: App\Controller\ReportController:planning, access: 'customer' } + defaults: { _controller: App\Controller\ReportController:planning, access: 'customer' } + +#== Export ====================================================================================================== +app_export_view: + path: /export + defaults: { _controller: App\Controller\ExportController:view } + +app_export_penalty_additional: + path: /export/export_penalty_additional + defaults: { _controller: App\Controller\ExportController:export_penalty_additional } + +export_project_weekly: + path: /export/export_project_weekly + defaults: { _controller: App\Controller\ExportController:export_project_weekly } + #== API =========================================================================================================== app_api: diff --git a/src/schedule-2.0/src/Controller/ExportController.php b/src/schedule-2.0/src/Controller/ExportController.php new file mode 100644 index 0000000..07e728a --- /dev/null +++ b/src/schedule-2.0/src/Controller/ExportController.php @@ -0,0 +1,274 @@ +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_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) { + $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; + } + + +} diff --git a/src/schedule-2.0/src/Controller/ReportController.php b/src/schedule-2.0/src/Controller/ReportController.php index 7dcc188..91dee02 100755 --- a/src/schedule-2.0/src/Controller/ReportController.php +++ b/src/schedule-2.0/src/Controller/ReportController.php @@ -1094,208 +1094,6 @@ class ReportController extends AbstractController } } - 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(); - $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('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')); diff --git a/src/schedule-2.0/src/Controller/TimerController.php b/src/schedule-2.0/src/Controller/TimerController.php index b8ffd8b..b1ebd59 100644 --- a/src/schedule-2.0/src/Controller/TimerController.php +++ b/src/schedule-2.0/src/Controller/TimerController.php @@ -234,41 +234,7 @@ class TimerController extends AbstractController } } - public function export(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) { - $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('Timer/export.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.csv"'); - - return $response; - } + protected function getErrorForm($id,$form,$request,$data,$mode) { if ($form->get('submit')->isClicked()&&$mode=="delete") { diff --git a/src/schedule-2.0/templates/Timer/export.csv.twig b/src/schedule-2.0/templates/Export/export_penalty_additional.csv.twig similarity index 90% rename from src/schedule-2.0/templates/Timer/export.csv.twig rename to src/schedule-2.0/templates/Export/export_penalty_additional.csv.twig index da9542e..e77864d 100644 --- a/src/schedule-2.0/templates/Timer/export.csv.twig +++ b/src/schedule-2.0/templates/Export/export_penalty_additional.csv.twig @@ -1,5 +1,4 @@ {% block body %} -Astreintes Actives Tâche;Astr.Act;H.Supp;Utilisateur;Début;Fin;Durée;Description; {% for timer in timers %} {{timer.taskname}};{{timer.activepenalty}};{{timer.additionalhour}};{{timer.user}};{{timer.start|date("d/m/Y H:i")}};{{timer.end|date("d/m/Y H:i")}};{{timer.duration|date("H:i")}};{{timer.description}}; diff --git a/src/schedule-2.0/templates/Report/export.csv.twig b/src/schedule-2.0/templates/Export/export_project_weekly.csv.twig similarity index 100% rename from src/schedule-2.0/templates/Report/export.csv.twig rename to src/schedule-2.0/templates/Export/export_project_weekly.csv.twig diff --git a/src/schedule-2.0/templates/Export/list.html.twig b/src/schedule-2.0/templates/Export/list.html.twig new file mode 100644 index 0000000..2d746db --- /dev/null +++ b/src/schedule-2.0/templates/Export/list.html.twig @@ -0,0 +1,24 @@ +{% extends "base.html.twig" %} +{% block body %} +

    +EXPORTS DE DONNEES +

    +
    + +
    + Exporter le cumul des points éffectués sur un projet, par tâche par utilisateur. +
    +
    +

    +
    + +
    + Exporter la liste des astreintes actives réalisés, ainsi que les saisies en heure supplémentaires +
    +
    +

    +{% endblock %} \ No newline at end of file diff --git a/src/schedule-2.0/templates/Report/report.html.twig b/src/schedule-2.0/templates/Report/report.html.twig index 4796074..d3ef41d 100644 --- a/src/schedule-2.0/templates/Report/report.html.twig +++ b/src/schedule-2.0/templates/Report/report.html.twig @@ -111,13 +111,6 @@ {% endif %} - {% if access!="customer" and app.user %} -
    -
    - Exporter -
    -
    - {% 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 %}
    diff --git a/src/schedule-2.0/templates/Timer/list.html.twig b/src/schedule-2.0/templates/Timer/list.html.twig index 45c7a26..20d86b6 100644 --- a/src/schedule-2.0/templates/Timer/list.html.twig +++ b/src/schedule-2.0/templates/Timer/list.html.twig @@ -37,7 +37,6 @@ SUIVI HORAIRE
    Voir le calendrier -Exporter Astreintes actives et heures supplémentaires

    diff --git a/src/schedule-2.0/templates/base.html.twig b/src/schedule-2.0/templates/base.html.twig index f0f3a73..7bed8be 100644 --- a/src/schedule-2.0/templates/base.html.twig +++ b/src/schedule-2.0/templates/base.html.twig @@ -365,12 +365,18 @@ -
  • +
  • Mes Congés
  • +
  • + + Exports + +
  • + {% endif %} {% if is_granted('ROLE_ADMIN') or is_granted('ROLE_VALIDATOR') %} From 8dee5b5ce4f2333bee850b8e70645198dd1e65d3 Mon Sep 17 00:00:00 2001 From: Matthieu Lamalle Date: Fri, 31 Jul 2020 10:20:33 +0200 Subject: [PATCH 48/63] =?UTF-8?q?export=20journ=C3=A9e=20pleines=20travail?= =?UTF-8?q?l=C3=A9s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/schedule-2.0/config/routes.yaml | 6 +- .../src/Controller/EventController.php | 1 - .../src/Controller/ExportController.php | 167 +++++++++++++++++- .../src/Controller/ReportController.php | 2 + .../Export/export_full_worked_days.csv.twig | 8 + .../Export/export_project_weekly.csv.twig | 2 + .../templates/Export/list.html.twig | 18 +- 7 files changed, 196 insertions(+), 8 deletions(-) create mode 100644 src/schedule-2.0/templates/Export/export_full_worked_days.csv.twig diff --git a/src/schedule-2.0/config/routes.yaml b/src/schedule-2.0/config/routes.yaml index 81223d7..da7d898 100644 --- a/src/schedule-2.0/config/routes.yaml +++ b/src/schedule-2.0/config/routes.yaml @@ -410,7 +410,11 @@ app_export_penalty_additional: export_project_weekly: path: /export/export_project_weekly - defaults: { _controller: App\Controller\ExportController: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 =========================================================================================================== diff --git a/src/schedule-2.0/src/Controller/EventController.php b/src/schedule-2.0/src/Controller/EventController.php index 57db4c4..aaa8c52 100755 --- a/src/schedule-2.0/src/Controller/EventController.php +++ b/src/schedule-2.0/src/Controller/EventController.php @@ -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]); } diff --git a/src/schedule-2.0/src/Controller/ExportController.php b/src/schedule-2.0/src/Controller/ExportController.php index 07e728a..081921e 100644 --- a/src/schedule-2.0/src/Controller/ExportController.php +++ b/src/schedule-2.0/src/Controller/ExportController.php @@ -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'); diff --git a/src/schedule-2.0/src/Controller/ReportController.php b/src/schedule-2.0/src/Controller/ReportController.php index 91dee02..039fb5c 100755 --- a/src/schedule-2.0/src/Controller/ReportController.php +++ b/src/schedule-2.0/src/Controller/ReportController.php @@ -121,6 +121,7 @@ class ReportController extends AbstractController $st->add(new \DateInterval('P1D')); } } + // On formate le tableau des astreintes $start=new \Datetime('first day of this month'); @@ -205,6 +206,7 @@ class ReportController extends AbstractController ); } else { + return $this->render('Report/synthese.html.twig',[ "useheader" => true, "usesidebar" => ($this->getUser()), diff --git a/src/schedule-2.0/templates/Export/export_full_worked_days.csv.twig b/src/schedule-2.0/templates/Export/export_full_worked_days.csv.twig new file mode 100644 index 0000000..1ed7156 --- /dev/null +++ b/src/schedule-2.0/templates/Export/export_full_worked_days.csv.twig @@ -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 %} \ No newline at end of file diff --git a/src/schedule-2.0/templates/Export/export_project_weekly.csv.twig b/src/schedule-2.0/templates/Export/export_project_weekly.csv.twig index 5ccce07..ff1b4b1 100644 --- a/src/schedule-2.0/templates/Export/export_project_weekly.csv.twig +++ b/src/schedule-2.0/templates/Export/export_project_weekly.csv.twig @@ -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 %} \ No newline at end of file diff --git a/src/schedule-2.0/templates/Export/list.html.twig b/src/schedule-2.0/templates/Export/list.html.twig index 2d746db..0b962dc 100644 --- a/src/schedule-2.0/templates/Export/list.html.twig +++ b/src/schedule-2.0/templates/Export/list.html.twig @@ -5,10 +5,11 @@ EXPORTS DE DONNEES
    - 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

    @@ -17,7 +18,18 @@ EXPORTS DE DONNEES Export des astreintes actives et heures supplémentaires
    - 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 +
    + +

    +
    + +
    + Exporter la liste des jours travaillés pleinement éligibles aux tickets restaurants + Filtres utiles : Nombre de mois, Intervenant

    From 5c690431dcb65005214ba8b6cf564e4a843537d6 Mon Sep 17 00:00:00 2001 From: Matthieu Lamalle Date: Fri, 31 Jul 2020 10:59:58 +0200 Subject: [PATCH 49/63] Ajout infromations export --- src/schedule-2.0/templates/Export/list.html.twig | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/schedule-2.0/templates/Export/list.html.twig b/src/schedule-2.0/templates/Export/list.html.twig index 0b962dc..51542bf 100644 --- a/src/schedule-2.0/templates/Export/list.html.twig +++ b/src/schedule-2.0/templates/Export/list.html.twig @@ -8,8 +8,8 @@ EXPORTS DE DONNEES Export des Projets par semaine par participant
    - Exporter le cumul des points éffectués sur un/des projets, par tâche par utilisateur. - Filtres utiles : Nombres de mois, Intervenant, Projet, Service +

    Exporter le cumul des points éffectués sur un/des projets, par tâche par utilisateur.

    +

    Filtres utiles : Nombres de mois, Projet, Service

    @@ -18,8 +18,8 @@ EXPORTS DE DONNEES Export des astreintes actives et heures supplémentaires
    - Exporter la liste des astreintes actives réalisés, ainsi que les saisies en heure supplémentaires. - Filtres utiles : Intervenant +

    Exporter la liste des astreintes actives réalisés, ainsi que les saisies en heure supplémentaires.

    +

    Filtres utiles : Intervenant (hors "Tout le monde")

    @@ -28,8 +28,8 @@ EXPORTS DE DONNEES Export des jours pleins travaillés
    - Exporter la liste des jours travaillés pleinement éligibles aux tickets restaurants - Filtres utiles : Nombre de mois, Intervenant +

    Exporter la liste des jours travaillés pleinement éligibles aux tickets restaurants

    +

    Filtres utiles : Nombre de mois, Intervenant

    From 6b0b8bf281754abb9baee320f11d447b57e6d967 Mon Sep 17 00:00:00 2001 From: Matthieu Lamalle Date: Fri, 31 Jul 2020 11:33:44 +0200 Subject: [PATCH 50/63] =?UTF-8?q?ajout=20possibilit=C3=A9=20de=20s=C3=A9le?= =?UTF-8?q?ctionner=20plusieurs=20utilisateurs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/Controller/EventController.php | 13 +++++++++++-- .../src/Controller/HomeController.php | 2 ++ .../src/Service/sessionListener.php | 5 ++++- src/schedule-2.0/templates/base.html.twig | 19 +++++++++++++++---- 4 files changed, 32 insertions(+), 7 deletions(-) diff --git a/src/schedule-2.0/src/Controller/EventController.php b/src/schedule-2.0/src/Controller/EventController.php index aaa8c52..10f82f0 100755 --- a/src/schedule-2.0/src/Controller/EventController.php +++ b/src/schedule-2.0/src/Controller/EventController.php @@ -48,8 +48,17 @@ class EventController extends AbstractController if($iduser=="all") $events=$em->getRepository("App:Event")->findAll(); else { - $user=$em->getRepository("App:User")->find($iduser); - $events=$em->getRepository("App:Event")->findBy(["user"=>$user]); + $selectedusers = $this->get("session")->get("selectedusers"); + if (isset($selectedusers) && sizeof($selectedusers)>1){ + $users= []; + foreach($selectedusers as $user) { + array_push($users,$em->getRepository("App:User")->find($user)); + } + $events=$em->getRepository("App:Event")->findBy(["user"=>$users]); + }else{ + $user=$em->getRepository("App:User")->find($iduser); + $events=$em->getRepository("App:Event")->findBy(["user"=>$user]); + } } foreach($events as $event) { diff --git a/src/schedule-2.0/src/Controller/HomeController.php b/src/schedule-2.0/src/Controller/HomeController.php index 01cfb4a..69b72af 100755 --- a/src/schedule-2.0/src/Controller/HomeController.php +++ b/src/schedule-2.0/src/Controller/HomeController.php @@ -36,7 +36,9 @@ class HomeController extends AbstractController public function selectuser(Request $request) { $iduser = $request->request->get('iduser'); + $selectedusers = $request->request->get('selectedusers'); $this->get('session')->set('iduser',$iduser); + $this->get('session')->set('selectedusers',$selectedusers); $output=["return"=>"OK"]; return new Response(json_encode($output)); } diff --git a/src/schedule-2.0/src/Service/sessionListener.php b/src/schedule-2.0/src/Service/sessionListener.php index 3c9560d..a872503 100644 --- a/src/schedule-2.0/src/Service/sessionListener.php +++ b/src/schedule-2.0/src/Service/sessionListener.php @@ -120,7 +120,10 @@ class sessionListener { ]; array_push($tbservices,$tmp); } - $session->set('services',$tbservices); + $session->set('services',$tbservices); + + $selectedusers=[]; + $session->set('selectedusers',$selectedusers); } } } diff --git a/src/schedule-2.0/templates/base.html.twig b/src/schedule-2.0/templates/base.html.twig index 7bed8be..10a6199 100644 --- a/src/schedule-2.0/templates/base.html.twig +++ b/src/schedule-2.0/templates/base.html.twig @@ -284,12 +284,20 @@
    - + {% for user in app.session.get('users') %} {% set selected="" %} - {%if user.id==app.session.get('iduser') %} - {% set selected="selected" %} + {% if app.session.get('selectedusers')|length > 1 %} + {% for suser in app.session.get('selectedusers') %} + {%if user.id == suser %} + {% set selected="selected" %} + {% endif %} + {% endfor %} + {% else %} + {%if user.id==app.session.get('iduser') %} + {% set selected="selected" %} + {% endif %} {% endif %} {% endfor %} @@ -512,10 +520,13 @@ $('#sideuser').on('select2:select', function (e) { var data = e.params.data; + var selectedusers = $('#sideuser').val(); + console.log(selectedusers) $.ajax({ type: "POST", data: { iduser: data.id, + selectedusers: selectedusers, }, url: "{{ path('app_home_selectuser') }}", success: function (response) { From 6954153be9369ad83e631dc28e682c0db4072aa4 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 31 Aug 2020 11:03:41 +0200 Subject: [PATCH 51/63] correction script migration --- .../scripts/migration/migration.php | 62 ++++++++++--------- src/schedule-2.0/scripts/reconfigure.sh | 2 +- 2 files changed, 33 insertions(+), 31 deletions(-) diff --git a/src/schedule-2.0/scripts/migration/migration.php b/src/schedule-2.0/scripts/migration/migration.php index a9a1fba..91a2b94 100644 --- a/src/schedule-2.0/scripts/migration/migration.php +++ b/src/schedule-2.0/scripts/migration/migration.php @@ -15,7 +15,7 @@ function purge($table) { writeligne("$table"); $q="DELETE FROM $table"; $query=$bddnew->prepare($q); - $query->execute(); + $query->execute(); } // Test de la connexion à la base @@ -48,6 +48,8 @@ writeligne("MIGRATION"); writeligne(""); writeligne("Purge des Tables Scheudle"); +Purge("userproject"); +Purge("timer"); Purge("event"); Purge("penalty"); Purge("task"); @@ -66,46 +68,46 @@ writeligne(""); writeligne("== Récupération Customer"); $q="SELECT * FROM schedule_customer"; $queryold=$bddold->prepare($q); -$queryold->execute(); +$queryold->execute(); while($row=$queryold->fetch()) { writeligne($row["customer_name"]); $q="INSERT IGNORE INTO customer (id, name, keypass) VALUES (?,?,?)"; $query=$bddnew->prepare($q); - $query->execute([$row["customer_id"],$row["customer_name"],$row["customer_key"]]); + $query->execute([$row["customer_id"],$row["customer_name"],$row["customer_key"]]); } writeligne(""); writeligne("== Récupération Nature"); $q="SELECT * FROM schedule_nature"; $queryold=$bddold->prepare($q); -$queryold->execute(); +$queryold->execute(); while($row=$queryold->fetch()) { writeligne($row["nature_name"]); $q="INSERT IGNORE INTO nature (id, name, isvacation) VALUES (?,?,?)"; $query=$bddnew->prepare($q); - $query->execute([$row["nature_id"],$row["nature_name"],false]); + $query->execute([$row["nature_id"],$row["nature_name"],false]); } writeligne("Congés"); $q="INSERT IGNORE INTO nature (id, name, isvacation) VALUES (?,?,?)"; $query=$bddnew->prepare($q); -$query->execute([-200,"Congés",true]); +$query->execute([-200,"Congés",true]); writeligne("Temps Partiel"); $q="INSERT IGNORE INTO nature (id, name, isvacation) VALUES (?,?,?)"; $query=$bddnew->prepare($q); -$query->execute([-190,"Temps Partiel",true]); +$query->execute([-190,"Temps Partiel",true]); writeligne(""); writeligne("== Récupération Service"); $q="SELECT * FROM schedule_service"; $queryold=$bddold->prepare($q); -$queryold->execute(); +$queryold->execute(); while($row=$queryold->fetch()) { writeligne($row["service_name"]); $q="INSERT IGNORE INTO service (id, name) VALUES (?,?)"; $query=$bddnew->prepare($q); - $query->execute([$row["service_id"],$row["service_name"]]); + $query->execute([$row["service_id"],$row["service_name"]]); } @@ -113,16 +115,16 @@ writeligne(""); writeligne("== Récupération User"); $q="SELECT * FROM schedule_user WHERE user_login!='system'"; $queryold=$bddold->prepare($q); -$queryold->execute(); +$queryold->execute(); while($row=$queryold->fetch()) { writeligne($row["user_login"]); $q="INSERT IGNORE INTO user (id, username, firstname, lastname, email, service_id, apikey, password) VALUES (?,?,?,?,?,?,?,?)"; $query=$bddnew->prepare($q); - $query->execute([$row["user_id"],$row["user_login"],$row["user_firstname"],$row["user_lastname"],$row["user_email"],$row["user_service"],$row["user_login"],"nopassword" ]); - + $query->execute([$row["user_id"],$row["user_login"],$row["user_firstname"],$row["user_lastname"],$row["user_email"],$row["user_service"],$row["user_login"],"nopassword" ]); + $output = shell_exec('/var/www/html/schedule/bin/console app:setPassword '.$row["user_login"].' '.$row["user_login"]); - + if($row["user_login"]=="afornerot") $roles='ROLE_ADMIN,ROLE_USER'; else { switch($row["user_profil"]) { @@ -131,7 +133,7 @@ while($row=$queryold->fetch()) { case 50: $roles='ROLE_USER'; break; case 99: $roles='ROLE_VISITOR'; break; default: $roles='ROLE_VISITOR'; break; - } + } } $output = shell_exec('/var/www/html/schedule/bin/console app:setRoles '.$row["user_login"].' '.$roles); } @@ -141,12 +143,12 @@ writeligne(""); writeligne("== Récupération Project"); $q="SELECT * FROM schedule_project"; $queryold=$bddold->prepare($q); -$queryold->execute(); +$queryold->execute(); while($row=$queryold->fetch()) { writeligne($row["project_name"]); $q="INSERT IGNORE INTO project (id, name, active, service_id, customer_id ) VALUES (?,?,?,?,?)"; $query=$bddnew->prepare($q); - $query->execute([$row["project_id"],$row["project_name"],$row["project_actif"],$row["project_service"],$row["project_customer"] ]); + $query->execute([$row["project_id"],$row["project_name"],$row["project_actif"],$row["project_service"],$row["project_customer"] ]); } @@ -154,19 +156,19 @@ writeligne(""); writeligne("== Récupération Offer"); $q="SELECT * FROM schedule_order"; $queryold=$bddold->prepare($q); -$queryold->execute(); +$queryold->execute(); while($row=$queryold->fetch()) { writeligne($row["order_name"]); $q="INSERT IGNORE INTO offer (id, name, ref, quantity, pu, validate, active, project_id ) VALUES (?,?,?,?,?,?,?,?)"; $query=$bddnew->prepare($q); - $query->execute([$row["order_id"],$row["order_name"],$row["order_ref"],$row["order_quantity"],$row["order_pu"],$row["order_validate"],$row["order_actif"],$row["order_project"] ]); + $query->execute([$row["order_id"],$row["order_name"],$row["order_ref"],$row["order_quantity"],$row["order_pu"],$row["order_validate"],$row["order_actif"],$row["order_project"] ]); } writeligne(""); writeligne("== Récupération Task"); $q="SELECT * FROM schedule_task"; $queryold=$bddold->prepare($q); -$queryold->execute(); +$queryold->execute(); while($row=$queryold->fetch()) { writeligne($row["task_name"]); $nature=$row["task_nature"]; @@ -175,67 +177,67 @@ while($row=$queryold->fetch()) { $q="INSERT IGNORE INTO task (id, name, color, quantity, validate, project_id, nature_id ) 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 ]); } writeligne(""); writeligne("== Récupération Event"); $q="SELECT * FROM schedule_event"; $queryold=$bddold->prepare($q); -$queryold->execute(); +$queryold->execute(); while($row=$queryold->fetch()) { writeligne($row["event_id"]); $q="INSERT IGNORE INTO event (id, description, start, end, allday, duration, validate, validateholiday, task_id, user_id ) VALUES (?,?,?,?,?,?,?,?,?,?)"; $query=$bddnew->prepare($q); - $query->execute([$row["event_id"],$row["event_description"],$row["event_start"],$row["event_end"],$row["event_allday"],$row["event_duration"],$row["event_validate"],$row["event_validate"],$row["event_task"],$row["event_user"] ]); + $query->execute([$row["event_id"],$row["event_description"],$row["event_start"],$row["event_end"],$row["event_allday"],$row["event_duration"],$row["event_validate"],$row["event_validate"],$row["event_task"],$row["event_user"] ]); } writeligne(""); writeligne("== Récupération Penalty"); $q="SELECT * FROM schedule_penalty"; $queryold=$bddold->prepare($q); -$queryold->execute(); +$queryold->execute(); while($row=$queryold->fetch()) { writeligne($row["penalty_id"]); $q="INSERT IGNORE INTO penalty (id, description, start, end, allday, duration, validate, task_id, user_id ) VALUES (?,?,?,?,?,?,?,?,?)"; $query=$bddnew->prepare($q); - $query->execute([$row["penalty_id"],$row["penalty_description"],$row["penalty_start"],$row["penalty_end"],$row["penalty_allday"],$row["penalty_duration"],$row["penalty_validate"],$row["penalty_task"],$row["penalty_user"] ]); + $query->execute([$row["penalty_id"],$row["penalty_description"],$row["penalty_start"],$row["penalty_end"],$row["penalty_allday"],$row["penalty_duration"],$row["penalty_validate"],$row["penalty_task"],$row["penalty_user"] ]); } writeligne(""); writeligne("== Récupération Breakday"); $q="SELECT * FROM schedule_breakday"; $queryold=$bddold->prepare($q); -$queryold->execute(); +$queryold->execute(); while($row=$queryold->fetch()) { writeligne($row["breakday_id"]); $q="INSERT IGNORE INTO breakday (id, start, end ) VALUES (?,?,?)"; $query=$bddnew->prepare($q); - $query->execute([$row["breakday_id"],$row["breakday_start"],$row["breakday_end"] ]); + $query->execute([$row["breakday_id"],$row["breakday_start"],$row["breakday_end"] ]); } writeligne(""); writeligne("== Récupération Job"); $q="SELECT * FROM schedule_job"; $queryold=$bddold->prepare($q); -$queryold->execute(); +$queryold->execute(); while($row=$queryold->fetch()) { writeligne($row["job_id"]); $q="INSERT IGNORE INTO job (id, name, type ) VALUES (?,?,?)"; $query=$bddnew->prepare($q); - $query->execute([$row["job_id"],$row["job_name"],$row["type"] ]); + $query->execute([$row["job_id"],$row["job_name"],$row["type"] ]); } writeligne(""); writeligne("== Récupération UserJob"); $q="SELECT * FROM schedule_user_jobs WHERE project_id=-100"; $queryold=$bddold->prepare($q); -$queryold->execute(); +$queryold->execute(); while($row=$queryold->fetch()) { writeligne($row["user_job_id"]); $q="INSERT IGNORE INTO userjob (user, job ) VALUES (?,?)"; $query=$bddnew->prepare($q); - $query->execute([$row["user_id"],$row["job_id"] ]); + $query->execute([$row["user_id"],$row["job_id"] ]); } echo "\n\n"; diff --git a/src/schedule-2.0/scripts/reconfigure.sh b/src/schedule-2.0/scripts/reconfigure.sh index 872c076..a461efd 100755 --- a/src/schedule-2.0/scripts/reconfigure.sh +++ b/src/schedule-2.0/scripts/reconfigure.sh @@ -3,7 +3,7 @@ cd /var/www/html/schedule # Déclaration d'un proxy -. proxy.sh +. /scripts/proxy.sh # Mise en place du fichier d'environnement model if [ ! -f /var/www/html/schedule/.env ]; then From 4523aa41b1f6670cc2ff076b70b55adfb634d6d8 Mon Sep 17 00:00:00 2001 From: Matthieu Lamalle Date: Tue, 1 Sep 2020 10:42:09 +0200 Subject: [PATCH 52/63] filtre evenets par projet --- src/schedule-2.0/src/Controller/EventController.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/schedule-2.0/src/Controller/EventController.php b/src/schedule-2.0/src/Controller/EventController.php index 10f82f0..5737243 100755 --- a/src/schedule-2.0/src/Controller/EventController.php +++ b/src/schedule-2.0/src/Controller/EventController.php @@ -60,8 +60,14 @@ class EventController extends AbstractController $events=$em->getRepository("App:Event")->findBy(["user"=>$user]); } } - 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; + } $tmp=$this->formatEvent($event); array_push($tbevents,$tmp); } From a524e353db597ec48404feb80c7b4c4032487cbf Mon Sep 17 00:00:00 2001 From: Matthieu Lamalle Date: Tue, 1 Sep 2020 10:42:50 +0200 Subject: [PATCH 53/63] =?UTF-8?q?cumul=20des=20dur=C3=A9es=20d'=C3=A9v?= =?UTF-8?q?=C3=A9nements=20dans=20les=20rapports=20si=20deux=20=C3=A9v?= =?UTF-8?q?=C3=A9nements=20sur=20une=20meme=20date?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/schedule-2.0/src/Controller/ReportController.php | 4 ++-- src/schedule-2.0/templates/Report/planning.html.twig | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/schedule-2.0/src/Controller/ReportController.php b/src/schedule-2.0/src/Controller/ReportController.php index 039fb5c..74e59e8 100755 --- a/src/schedule-2.0/src/Controller/ReportController.php +++ b/src/schedule-2.0/src/Controller/ReportController.php @@ -352,7 +352,7 @@ class ReportController extends AbstractController $end=new \Datetime('first day of this month'); $end->add(new \DateInterval('P'.$nbmonth.'M')); $end->sub(new \DateInterval('P1D')); - + foreach($users as $user) { $tbevents = $this->getEventuser($user,$start,$end,false); @@ -955,7 +955,7 @@ class ReportController extends AbstractController ]; } - $tbevents[$idproject][$idday]["duration"]=($event->getAllday()?1:0.5); + $tbevents[$idproject][$idday]["duration"]+=($event->getAllday()?1:0.5); $st->add(new \DateInterval('P1D')); diff --git a/src/schedule-2.0/templates/Report/planning.html.twig b/src/schedule-2.0/templates/Report/planning.html.twig index 9186e25..fa7ee6d 100644 --- a/src/schedule-2.0/templates/Report/planning.html.twig +++ b/src/schedule-2.0/templates/Report/planning.html.twig @@ -99,9 +99,10 @@

    {{ project.displayname }}

    Estimé = {{ project.estimate }}
    + Commandé = {{ project.proposed }} Validé = {{ project.validate }}
    Planifié = {{ project.planified }}
    - RESTE = {{ (project.estimate - project.validate - project.planified) }} + RESTE = {{ ( project.proposed - project.validate - project.planified) }}
    From 254dec43729f7a1b5ef2682f87abacbf69cf5c78 Mon Sep 17 00:00:00 2001 From: Matthieu Lamalle Date: Tue, 1 Sep 2020 10:43:05 +0200 Subject: [PATCH 54/63] =?UTF-8?q?ajout=20var=20office=20=C3=A0=20la=20conf?= =?UTF-8?q?ig?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tmpl/schedule-env.local | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tmpl/schedule-env.local b/tmpl/schedule-env.local index 7815fe1..49afc0f 100644 --- a/tmpl/schedule-env.local +++ b/tmpl/schedule-env.local @@ -35,4 +35,7 @@ DATABASE_HOST=%%adresse_ip_mysql # CAS = Redefine local CAS_HOST=%%eolesso_adresse CAS_PORT=%%eolesso_port -CAS_PATH=%%eolesso_cas_folder \ No newline at end of file +CAS_PATH=%%eolesso_cas_folder + +OFFICE_HOUR_START=09:00 +OFFICE_HOUR_END=17:30 \ No newline at end of file From 058d5177eb12b504277069578bfd189e6d01dee9 Mon Sep 17 00:00:00 2001 From: Matthieu Lamalle Date: Tue, 1 Sep 2020 11:45:41 +0200 Subject: [PATCH 55/63] remove select multi user --- .../src/Controller/EventController.php | 13 ++---------- .../src/Controller/HomeController.php | 2 -- .../src/Service/sessionListener.php | 2 -- src/schedule-2.0/templates/base.html.twig | 20 +++++-------------- 4 files changed, 7 insertions(+), 30 deletions(-) diff --git a/src/schedule-2.0/src/Controller/EventController.php b/src/schedule-2.0/src/Controller/EventController.php index 5737243..e255281 100755 --- a/src/schedule-2.0/src/Controller/EventController.php +++ b/src/schedule-2.0/src/Controller/EventController.php @@ -48,17 +48,8 @@ class EventController extends AbstractController if($iduser=="all") $events=$em->getRepository("App:Event")->findAll(); else { - $selectedusers = $this->get("session")->get("selectedusers"); - if (isset($selectedusers) && sizeof($selectedusers)>1){ - $users= []; - foreach($selectedusers as $user) { - array_push($users,$em->getRepository("App:User")->find($user)); - } - $events=$em->getRepository("App:Event")->findBy(["user"=>$users]); - }else{ - $user=$em->getRepository("App:User")->find($iduser); - $events=$em->getRepository("App:Event")->findBy(["user"=>$user]); - } + $user=$em->getRepository("App:User")->find($iduser); + $events=$em->getRepository("App:Event")->findBy(["user"=>$user]); } foreach($events as $event) { $idproject=$event->getTask()->getProject()->getId(); diff --git a/src/schedule-2.0/src/Controller/HomeController.php b/src/schedule-2.0/src/Controller/HomeController.php index 69b72af..01cfb4a 100755 --- a/src/schedule-2.0/src/Controller/HomeController.php +++ b/src/schedule-2.0/src/Controller/HomeController.php @@ -36,9 +36,7 @@ class HomeController extends AbstractController public function selectuser(Request $request) { $iduser = $request->request->get('iduser'); - $selectedusers = $request->request->get('selectedusers'); $this->get('session')->set('iduser',$iduser); - $this->get('session')->set('selectedusers',$selectedusers); $output=["return"=>"OK"]; return new Response(json_encode($output)); } diff --git a/src/schedule-2.0/src/Service/sessionListener.php b/src/schedule-2.0/src/Service/sessionListener.php index a872503..e99f79d 100644 --- a/src/schedule-2.0/src/Service/sessionListener.php +++ b/src/schedule-2.0/src/Service/sessionListener.php @@ -122,8 +122,6 @@ class sessionListener { } $session->set('services',$tbservices); - $selectedusers=[]; - $session->set('selectedusers',$selectedusers); } } } diff --git a/src/schedule-2.0/templates/base.html.twig b/src/schedule-2.0/templates/base.html.twig index 10a6199..301d36b 100644 --- a/src/schedule-2.0/templates/base.html.twig +++ b/src/schedule-2.0/templates/base.html.twig @@ -284,20 +284,13 @@
    - + + {% for user in app.session.get('users') %} {% set selected="" %} - {% if app.session.get('selectedusers')|length > 1 %} - {% for suser in app.session.get('selectedusers') %} - {%if user.id == suser %} - {% set selected="selected" %} - {% endif %} - {% endfor %} - {% else %} - {%if user.id==app.session.get('iduser') %} - {% set selected="selected" %} - {% endif %} + {%if user.id==app.session.get('iduser') %} + {% set selected="selected" %} {% endif %} {% endfor %} @@ -520,13 +513,10 @@ $('#sideuser').on('select2:select', function (e) { var data = e.params.data; - var selectedusers = $('#sideuser').val(); - console.log(selectedusers) $.ajax({ type: "POST", data: { iduser: data.id, - selectedusers: selectedusers, }, url: "{{ path('app_home_selectuser') }}", success: function (response) { From c0d1759bed12cc0f9bc3ce1f03e356dcfe4d9234 Mon Sep 17 00:00:00 2001 From: afornerot Date: Tue, 1 Sep 2020 11:54:55 +0200 Subject: [PATCH 56/63] distinguer les vacations sur le flag validateholiday (fixes #29) --- src/schedule-2.0/scripts/migration/migration.php | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/schedule-2.0/scripts/migration/migration.php b/src/schedule-2.0/scripts/migration/migration.php index 91a2b94..17ae0d2 100644 --- a/src/schedule-2.0/scripts/migration/migration.php +++ b/src/schedule-2.0/scripts/migration/migration.php @@ -182,14 +182,25 @@ while($row=$queryold->fetch()) { writeligne(""); writeligne("== Récupération Event"); -$q="SELECT * FROM schedule_event"; +$q="SELECT * FROM schedule_event, schedule_task WHERE event_task=task_id"; $queryold=$bddold->prepare($q); $queryold->execute(); while($row=$queryold->fetch()) { + // Event vacation ? + $isvacation=false; + if($row["task_id"]<=-70) $isvacation=true; + if($row["task_id"]==-85 || $row["task_id"]==-70) $isvacation=true; + + // Validation + $validate=$row["event_validate"]; + $validateholiday=false; + if($isvacation) $validateholiday=$row["event_validate"]; + + // Génération de l'event writeligne($row["event_id"]); $q="INSERT IGNORE INTO event (id, description, start, end, allday, duration, validate, validateholiday, task_id, user_id ) VALUES (?,?,?,?,?,?,?,?,?,?)"; $query=$bddnew->prepare($q); - $query->execute([$row["event_id"],$row["event_description"],$row["event_start"],$row["event_end"],$row["event_allday"],$row["event_duration"],$row["event_validate"],$row["event_validate"],$row["event_task"],$row["event_user"] ]); + $query->execute([$row["event_id"],$row["event_description"],$row["event_start"],$row["event_end"],$row["event_allday"],$row["event_duration"],$validate,$validateholiday,$row["event_task"],$row["event_user"] ]); } writeligne(""); From e37ced1f4d6a5f42c9f7011587900bfe0d413488 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 1 Sep 2020 11:59:20 +0200 Subject: [PATCH 57/63] resolution pb proxy.sh sur reconf --- src/schedule-2.0/scripts/reconfigure.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/schedule-2.0/scripts/reconfigure.sh b/src/schedule-2.0/scripts/reconfigure.sh index a461efd..a9c3dbc 100755 --- a/src/schedule-2.0/scripts/reconfigure.sh +++ b/src/schedule-2.0/scripts/reconfigure.sh @@ -3,7 +3,7 @@ cd /var/www/html/schedule # Déclaration d'un proxy -. /scripts/proxy.sh +. scripts/proxy.sh # Mise en place du fichier d'environnement model if [ ! -f /var/www/html/schedule/.env ]; then From 761f4c929d321410b773e314a544756e08deb348 Mon Sep 17 00:00:00 2001 From: Matthieu Lamalle Date: Tue, 1 Sep 2020 14:34:24 +0200 Subject: [PATCH 58/63] =?UTF-8?q?opyimisation=20de=20la=20requetes=20des?= =?UTF-8?q?=20=C3=A9v=C3=A9nements?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/Controller/EventController.php | 43 ++++++++++++++----- src/schedule-2.0/templates/base.html.twig | 36 ++++++++-------- 2 files changed, 51 insertions(+), 28 deletions(-) diff --git a/src/schedule-2.0/src/Controller/EventController.php b/src/schedule-2.0/src/Controller/EventController.php index e255281..2708c8a 100755 --- a/src/schedule-2.0/src/Controller/EventController.php +++ b/src/schedule-2.0/src/Controller/EventController.php @@ -26,7 +26,6 @@ class EventController extends AbstractController public function list(Request $request) { $em = $this->getDoctrine()->getManager(); - $users = $em->getRepository("App:User")->findAll(); $tasks = $em->getRepository("App:Task")->findAll(); @@ -42,20 +41,48 @@ class EventController extends AbstractController { $em = $this->getDoctrine()->getManager(); $tbevents=[]; - - // Evenements + $start = $request->query->get('start'); + $end = $request->query->get('end'); $iduser=$this->get("session")->get("iduser"); - if($iduser=="all") + // Evenements + if($iduser=="all") { $events=$em->getRepository("App:Event")->findAll(); + $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(); + } else { $user=$em->getRepository("App:User")->find($iduser); $events=$em->getRepository("App:Event")->findBy(["user"=>$user]); + $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 service + + if($this->get('session')->get('idservice')!="all") { + + $idservice=$event->getUser()->getService()->getId(); + if ($idservice!=$this->get('session')->get('idservice')){ + continue; + } + } // Filtre par project + if($this->get('session')->get('idproject')!="all") { + $idproject=$event->getTask()->getProject()->getId(); if($idproject!=$this->get('session')->get('idproject')) continue; } @@ -64,7 +91,6 @@ class EventController extends AbstractController } // Astreintes - $iduser=$this->get("session")->get("iduser"); if($iduser=="all") $penaltys=$em->getRepository("App:Penalty")->findAll(); else { @@ -72,11 +98,9 @@ class EventController extends AbstractController $user=$em->getRepository("App:User")->find($iduser); $penaltys=$em->getRepository("App:Penalty")->findBy(["user"=>$user]); } - foreach($penaltys as $penalty) { $tmp=$this->formatEvent($penalty); array_push($tbevents,$tmp); - } // Breakday @@ -87,7 +111,6 @@ class EventController extends AbstractController } - // Retour return new Response(json_encode($tbevents)); } diff --git a/src/schedule-2.0/templates/base.html.twig b/src/schedule-2.0/templates/base.html.twig index 301d36b..c6c61e5 100644 --- a/src/schedule-2.0/templates/base.html.twig +++ b/src/schedule-2.0/templates/base.html.twig @@ -277,7 +277,23 @@ {% endfor %}
    - + + + +
    + +
    - - -
    - -
    +
  • From d9fe49cce56b863693e44a0b6a11438353f176ed Mon Sep 17 00:00:00 2001 From: Matthieu Lamalle Date: Tue, 1 Sep 2020 14:46:37 +0200 Subject: [PATCH 59/63] Affichage 7 evenement par jour --- src/schedule-2.0/assets/js/fullcalendar.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/schedule-2.0/assets/js/fullcalendar.js b/src/schedule-2.0/assets/js/fullcalendar.js index dcdf8a1..ee44799 100644 --- a/src/schedule-2.0/assets/js/fullcalendar.js +++ b/src/schedule-2.0/assets/js/fullcalendar.js @@ -17,7 +17,7 @@ document.addEventListener('DOMContentLoaded', function() { weekNumbers: true, selectable: true, events: 'event/load', - eventLimit:4, + eventLimit:8, eventDrop: function(info) { info.revert(); }, From ecacf68ad30138c6b0e8315da4ed29447b58b289 Mon Sep 17 00:00:00 2001 From: Matthieu Lamalle Date: Tue, 1 Sep 2020 16:04:59 +0200 Subject: [PATCH 60/63] correction timer --- src/schedule-2.0/src/Controller/TimerController.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/schedule-2.0/src/Controller/TimerController.php b/src/schedule-2.0/src/Controller/TimerController.php index b1ebd59..4b3a4fd 100644 --- a/src/schedule-2.0/src/Controller/TimerController.php +++ b/src/schedule-2.0/src/Controller/TimerController.php @@ -97,11 +97,6 @@ class TimerController extends AbstractController $officeworkend = clone $officeworkstart; $officeworkstart->SetTime(9,0,0); $officeworkend->SetTime(17,30,0); - if ($start < $officeworkstart || $end > $officeworkend) { - $timer->setAdditionalHour(true); - }else{ - $timer->setAdditionalHour($additionalhour); - } $timer = new Entity(); $timer->setUser($user); @@ -111,6 +106,11 @@ class TimerController extends AbstractController $timer->setDuration($duration); $timer->setDescription($description); $timer->setActivePenalty($activepenalty); + if ($start < $officeworkstart || $end > $officeworkend) { + $timer->setAdditionalHour(true); + }else{ + $timer->setAdditionalHour($additionalhour); + } $em->persist($timer); $em->flush(); From 9836498b1c5fef565c8df0a460991b9c6abade28 Mon Sep 17 00:00:00 2001 From: Matthieu Lamalle Date: Tue, 1 Sep 2020 16:25:05 +0200 Subject: [PATCH 61/63] Corrections sur Timers --- src/schedule-2.0/src/Controller/TimerController.php | 5 ++--- src/schedule-2.0/templates/Timer/list.html.twig | 11 +++++++++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/schedule-2.0/src/Controller/TimerController.php b/src/schedule-2.0/src/Controller/TimerController.php index 4b3a4fd..bf6ed94 100644 --- a/src/schedule-2.0/src/Controller/TimerController.php +++ b/src/schedule-2.0/src/Controller/TimerController.php @@ -43,7 +43,6 @@ class TimerController extends AbstractController $user = $em->getRepository("App:User")->find($iduser); $tasks = $em->getRepository("App:Task")->findAll(); $timers = $em->getRepository("App:Timer")->findBy(["user"=>$iduser]); - return $this->render($this->render.'list.cal.html.twig',[ "useheader" => true, "usesidebar" => true, @@ -105,11 +104,11 @@ class TimerController extends AbstractController $timer->setEnd($end); $timer->setDuration($duration); $timer->setDescription($description); - $timer->setActivePenalty($activepenalty); + $timer->setActivePenalty($activepenalty ? $activepenalty : false); if ($start < $officeworkstart || $end > $officeworkend) { $timer->setAdditionalHour(true); }else{ - $timer->setAdditionalHour($additionalhour); + $timer->setAdditionalHour($additionalhour ? $additionalhour : false); } $em->persist($timer); $em->flush(); diff --git a/src/schedule-2.0/templates/Timer/list.html.twig b/src/schedule-2.0/templates/Timer/list.html.twig index 20d86b6..f829542 100644 --- a/src/schedule-2.0/templates/Timer/list.html.twig +++ b/src/schedule-2.0/templates/Timer/list.html.twig @@ -14,9 +14,11 @@ SUIVI HORAIRE
    - +
    - Créer un Timer + + Créer un Timer + {% if user %} Lancer un Timer :