From 8170e02dab12584eda84f7095ed70c7e8cbf6553 Mon Sep 17 00:00:00 2001 From: afornerot Date: Mon, 21 Feb 2022 09:36:27 +0100 Subject: [PATCH] svg --- .../config/packages/fos_rest.yaml | 24 ++-- .../config/packages/nelmio_api_doc.yaml | 6 +- src/ninebadge-1.0/config/routes.yaml | 10 +- .../config/routes/nelmio_api_doc.yaml | 6 +- src/ninebadge-1.0/config/services.yaml | 4 +- src/ninebadge-1.0/src/Controller/.gitignore | 0 .../src/Controller/ConfigController.php | 10 ++ .../src/Controller/RestController.php | 114 ++++++++++++++++++ .../src/Controller/TallydayController.php | 81 ++++++++++++- .../src/Repository/TallydayRepository.php | 17 ++- .../templates/Config/frame.html.twig | 52 ++++++++ .../templates/Include/sidebar.html.twig | 9 +- .../templates/Tallyday/month.html.twig | 3 + .../templates/Tallyday/tallyday.html.twig | 52 +++++++- .../templates/Tallyday/user.html.twig | 2 +- 15 files changed, 354 insertions(+), 36 deletions(-) delete mode 100644 src/ninebadge-1.0/src/Controller/.gitignore create mode 100644 src/ninebadge-1.0/src/Controller/RestController.php create mode 100644 src/ninebadge-1.0/templates/Config/frame.html.twig diff --git a/src/ninebadge-1.0/config/packages/fos_rest.yaml b/src/ninebadge-1.0/config/packages/fos_rest.yaml index d96294e..f3426cd 100644 --- a/src/ninebadge-1.0/config/packages/fos_rest.yaml +++ b/src/ninebadge-1.0/config/packages/fos_rest.yaml @@ -1,15 +1,11 @@ # Read the documentation: https://symfony.com/doc/master/bundles/FOSRestBundle/index.html -fos_rest: null -# param_fetcher_listener: true -# allowed_methods_listener: true -# routing_loader: true -# view: -# view_response_listener: true -# exception: -# codes: -# App\Exception\MyException: 403 -# messages: -# App\Exception\MyException: Forbidden area. -# format_listener: -# rules: -# - { path: ^/api, prefer_extension: true, fallback_format: json, priorities: [ json, html ] } +fos_rest: + param_fetcher_listener: true + body_listener: true + + format_listener: + enabled: true + rules: + - { path: '/rest', priorities: ['json', 'xml'], fallback_format: 'html' } + - { path: '/', fallback_format: 'html' } + diff --git a/src/ninebadge-1.0/config/packages/nelmio_api_doc.yaml b/src/ninebadge-1.0/config/packages/nelmio_api_doc.yaml index 4e68479..903cf1d 100644 --- a/src/ninebadge-1.0/config/packages/nelmio_api_doc.yaml +++ b/src/ninebadge-1.0/config/packages/nelmio_api_doc.yaml @@ -1,9 +1,9 @@ nelmio_api_doc: documentation: info: - title: My App - description: This is an awesome app! + title: '%appName%' + description: version: 1.0.0 areas: # to filter documented areas path_patterns: - - ^/api(?!/doc$) # Accepts routes under /api except /api/doc + - /rest # Accepts routes under /rest except /rest/doc diff --git a/src/ninebadge-1.0/config/routes.yaml b/src/ninebadge-1.0/config/routes.yaml index 5d40836..aad38e9 100644 --- a/src/ninebadge-1.0/config/routes.yaml +++ b/src/ninebadge-1.0/config/routes.yaml @@ -60,7 +60,11 @@ app_config_delete: app_config_logo: path: /admin/config/logo defaults: { _controller: App\Controller\ConfigController:logo } - + +app_config_frame: + path: /admin/config/frame + defaults: { _controller: App\Controller\ConfigController:frame } + #== Theme ================================================================================================================ app_theme: path: /admin/theme @@ -209,6 +213,10 @@ app_tallyday_userdevalidate: path: /user/devalidate/{{dateof}} defaults: { _controller: App\Controller\TallydayController:userdevalidate } +app_tallyday_userrecalcul: + path: /user/recalcul + defaults: { _controller: App\Controller\TallydayController:userrecalcul } + app_tallyday_masterlist: path: /master/tallydays defaults: { _controller: App\Controller\TallydayController:mastertallydays } diff --git a/src/ninebadge-1.0/config/routes/nelmio_api_doc.yaml b/src/ninebadge-1.0/config/routes/nelmio_api_doc.yaml index 364b4af..a28e5f2 100644 --- a/src/ninebadge-1.0/config/routes/nelmio_api_doc.yaml +++ b/src/ninebadge-1.0/config/routes/nelmio_api_doc.yaml @@ -1,8 +1,8 @@ # Expose your documentation as JSON swagger compliant -app.swagger: - path: /api/doc.json +app_swagger_ui: + path: /rest methods: GET - defaults: { _controller: nelmio_api_doc.controller.swagger } + defaults: { _controller: nelmio_api_doc.controller.swagger_ui } ## Requires the Asset component and the Twig bundle ## $ composer require twig asset diff --git a/src/ninebadge-1.0/config/services.yaml b/src/ninebadge-1.0/config/services.yaml index c4f61ff..8278b3f 100644 --- a/src/ninebadge-1.0/config/services.yaml +++ b/src/ninebadge-1.0/config/services.yaml @@ -103,4 +103,6 @@ services: - [setContainer, ["@service_container"]] tags: - { name: twig.extension } - \ No newline at end of file + + App\Controller\RestController: + public: true \ No newline at end of file diff --git a/src/ninebadge-1.0/src/Controller/.gitignore b/src/ninebadge-1.0/src/Controller/.gitignore deleted file mode 100644 index e69de29..0000000 diff --git a/src/ninebadge-1.0/src/Controller/ConfigController.php b/src/ninebadge-1.0/src/Controller/ConfigController.php index 375213a..5186b23 100755 --- a/src/ninebadge-1.0/src/Controller/ConfigController.php +++ b/src/ninebadge-1.0/src/Controller/ConfigController.php @@ -97,6 +97,16 @@ class ConfigController extends AbstractController return $this->render($this->render.'logo.html.twig'); } + public function frame(Request $request) + { + $url=$request->query->get('url'); + return $this->render($this->render.'frame.html.twig' ,[ + 'useheader' => true, + 'usesidebar' => true, + 'url' => $url, + ]); + } + protected function getErrorForm($id,$form,$request,$data) { if ($form->get('submit')->isClicked() && !$form->isValid()) { $this->get('session')->getFlashBag()->clear(); diff --git a/src/ninebadge-1.0/src/Controller/RestController.php b/src/ninebadge-1.0/src/Controller/RestController.php new file mode 100644 index 0000000..5e5b6d4 --- /dev/null +++ b/src/ninebadge-1.0/src/Controller/RestController.php @@ -0,0 +1,114 @@ +getDoctrine()->getManager(); + + // Récupération des parametres + $key=$request->get("key"); + + // Rechercher l'utilisateur associé à la clé + $user = $em->getRepository("App:User")->findOneBy(["apikey"=>$key]); + if(!$user) { + $view = $this->view("API Key inconnue", 403); + return $this->handleView($view); + } + $datenow=new \DateTime("now"); + $datenow->setTime ( $datenow->format("H"), $datenow->format("i"), 0 ); + + // On recherche le dernier pointage de la journée + $data = $em->getRepository("App:Tallyday")->findOneBy(["user"=>$user,"dateof"=>$datenow],["datestart"=>"DESC"]); + + // Si pas d'entrée ou si la dernière entrée à une date de fin, c'est que l'on ouvre un créneau + if(!$data||$data->getDateend()) { + $data = new Tallyday(); + $data->setDateof(new \DateTime("now")); + $data->setUser($this->getUser()); + $data->setValidateuser(false); + $data->setValidatemaster(false); + $data->setIsbreakday(false); + $data->setDatestart($datenow); + } + + // Sinon c'est que l'on ferme un creneau + elseif($data) { + $data->setDateend($datenow); + } + + // Sinon pas normal + else { + $view = $this->view("Incohérence dans vos créneaux horaires", 404); + return $this->handleView($view); + } + + // On vérifie quand meme la cohérance des crénaux + if(!$em->getRepository("App:Tallyday")->vefifTallytime($data)) { + $view = $this->view("Incohérence dans vos créneaux horaires", 404); + return $this->handleView($view); + } + + // C'est ok on fluh + $em->persist($data); + $em->flush(); + + + // Calcul du temps de la journée + $datas = $em->getRepository("App:Tallyday")->findTallyday($user,clone $datenow); + $e = new \DateTime('00:00'); + $f = clone $e; + foreach($datas as $data) { + $e->add($data->getTimeday()); + } + $interval = $f->diff($e); + $timeday = (($interval->days*24) + $interval->h).":".sprintf("%02s",$interval->i); + + $output = [ + "timeday" => $timeday, + "capitaltime" => $em->getRepository("App:Tallyday")->getCapitaltime($user), + ]; + + $view = $this->view($output, 200); + return $this->handleView($view); + } + +} + + diff --git a/src/ninebadge-1.0/src/Controller/TallydayController.php b/src/ninebadge-1.0/src/Controller/TallydayController.php index 79dee92..03c78b1 100755 --- a/src/ninebadge-1.0/src/Controller/TallydayController.php +++ b/src/ninebadge-1.0/src/Controller/TallydayController.php @@ -531,9 +531,10 @@ class TallydayController extends AbstractController // Validation $data->setValidateuser(true); $em->persist($data); - $em->flush(); } + $em->flush(); + if($request->get("from")=="list") return $this->redirectToRoute("app_tallyday_userlist",["week"=>$request->get("week")]); else @@ -680,6 +681,21 @@ class TallydayController extends AbstractController } public function mastermonth($monthof, Request $request) { + // On calcul le nombre de jour ouvrable dans le mois + $datenow=new \DateTime($monthof."01"); + $dateend=clone $datenow; + $dateend->modify("last day of this month"); + + $nbopendays=0; + while ($datenow <= $dateend) { + // jour différent de samedi et dimanche + if($datenow->format("w")!=0&&$datenow->format("w")!=6) + $nbopendays++; + + $datenow->add(new \DateInterval('P1D')); + } + $timetowork=($nbopendays*7).":00"; + // Pour l'ensemble des utlisateurs $em = $this->getDoctrine()->getManager(); $users = $em->getRepository("App:User")->findBy([],["firstname"=>"ASC","lastname"=>"ASC"]); @@ -731,8 +747,8 @@ class TallydayController extends AbstractController } $interval = $fmonth->diff($emonth); - $timeweek = (($interval->days*24) + $interval->h).":".sprintf("%02s",$interval->i); - $dates[$user->getId()]["timemonth"]=$timeweek; + $timemonth = (($interval->days*24) + $interval->h).":".sprintf("%02s",$interval->i); + $dates[$user->getId()]["timemonth"]=$timemonth; } } @@ -752,6 +768,7 @@ class TallydayController extends AbstractController "monthof" => $dateend, "nextmonth" => $nextmonth->format("Ym"), "prevmonth" => $prevmonth->format("Ym"), + "timetowork" => $timetowork, "dates" => $dates, "fgprint" => true, "message" => $request->get("message"), @@ -775,6 +792,7 @@ class TallydayController extends AbstractController "monthof" => $dateend, "nextmonth" => $nextmonth->format("Ym"), "prevmonth" => $prevmonth->format("Ym"), + "timetowork" => $timetowork, "dates" => $dates, "fgprint" => false, "message" => $request->get("message"), @@ -878,6 +896,63 @@ class TallydayController extends AbstractController return $this->redirectToRoute("app_tallyday"); } + public function userrecalcul() { + $em = $this->getDoctrine()->getManager(); + + // On recherche le dernier pointage de la journée + $datenow=new \DateTime("now"); + $datenow->setTime ( $datenow->format("H"), $datenow->format("i"), 0 ); + $datas = $em->getRepository($this->entity)->findTallyday($this->getUser(),clone $datenow); + + // Cumul des temps de la journée + $e = new \DateTime('00:00'); + $f = clone $e; + foreach($datas as $data) { + $e->add($data->getTimeday()); + } + + // On recherche le dernier pointage de la journée non terminé et on simule le créneau avec la date du moment + $data = $em->getRepository($this->entity)->findOneBy(["user"=>$this->getUser(),"dateof"=>$datenow],["datestart"=>"DESC"]); + if($data&&$data->getDatestart()&&!$data->getDateend()) { + $interval2 = $datenow->diff($data->getDatestart()); + $e->add($interval2); + } + + // Calcul de temps global de la journée = réel + simulé + $interval = $e->diff($f); + $timeday = $interval->format("%R").(($interval->days*24) + $interval->h).":".sprintf("%02s",$interval->i); + + // On récupère le capital + $capital=$em->getRepository("App:Tallyday")->getCapitaltimeinterval($this->getUser()); + $e = new \DateTime('00:00'); + + + // Si la journée n'est finalisé on ajoute le créneau simulé + if($data&&$data->getDatestart()&&!$data->getDateend()) { + $f = new \DateTime('00:00'); + $f->add($interval); + $f->sub(new \DateInterval('PT7H')); + $f->add($capital); + } + // Si la journée n'est pas encore validé : on ajoute la journée à la simulation + else if($data && (!$data->getValidateuser()||!$data->getValidateuser())) { + $f = new \DateTime('00:00'); + $f->add($interval); + $f->sub(new \DateInterval('PT7H')); + $f->add($capital); + } + + $interval = $e->diff($f); + $newcapital = $interval->format("%R").(($interval->days*24) + $interval->h).":".sprintf("%02s",$interval->i); + + return new JsonResponse([ + 'success' => true, + 'tosimulatetime' => ($data&&$data->getDatestart()&&!$data->getDateend()), + 'timeday' => $timeday, + 'tosimulatecapital' => ($data&&(!$data->getValidateuser()||!$data->getValidateuser())), + 'capital' => $newcapital, + ]); + } protected function getErrorForm($id,$form,$request,$data,$mode) { diff --git a/src/ninebadge-1.0/src/Repository/TallydayRepository.php b/src/ninebadge-1.0/src/Repository/TallydayRepository.php index fdf9756..fc40de3 100644 --- a/src/ninebadge-1.0/src/Repository/TallydayRepository.php +++ b/src/ninebadge-1.0/src/Repository/TallydayRepository.php @@ -51,7 +51,7 @@ class TallydayRepository extends ServiceEntityRepository return $datas; } - public function getCapitaltime($user,$monthof=null) { + public function getCapitaltimeinterval($user) { $datenow=new \DateTime('00:00'); $datas = $this->_em->getRepository('App:Tallyday')->findBy(["user"=>$user],["datestart"=>"DESC"]); $tbweek=[]; @@ -87,13 +87,20 @@ class TallydayRepository extends ServiceEntityRepository $etowork = new \DateTime('00:00'); $etowork->sub(new \DateInterval("PT".($nbdaywork*7)."H")); - $interval = $etowork->diff($ework); - $timeday = (($interval->days*24) + $interval->h).":".sprintf("%02s",$interval->i); - if($ework>$etowork) $timeday="-".$timeday; - + $interval = $ework->diff($etowork); + + return $interval; + } + + public function getCapitaltime($user) { + $interval=$this->getCapitaltimeinterval($user); + $timeday = $interval->format("%R").(($interval->days*24) + $interval->h).":".sprintf("%02s",$interval->i); return $timeday; } + + + public function vefifTallytime($tallyday) { $qb = $this->createQueryBuilder('tallydate') ->Where('tallydate.user=:user') diff --git a/src/ninebadge-1.0/templates/Config/frame.html.twig b/src/ninebadge-1.0/templates/Config/frame.html.twig new file mode 100644 index 0000000..9342f3a --- /dev/null +++ b/src/ninebadge-1.0/templates/Config/frame.html.twig @@ -0,0 +1,52 @@ +{% extends "base.html.twig" %} + +{% block localstyle %} + html { + height:100%; + } + + body { + overflow: hidden; + height:100%; + } + + #main { + padding-right: 0px; + } + .contentsidebar { + margin-left: 235px; + } + + iframe { + width: 100%; + border: none; + } +{% endblock %} + +{% block body %} + +{% endblock %} + + + +{% block localjavascript %} + $(window).resize(function() { + resizeFrame(); + }); + + $('document').ready(function(){ + resizeFrame(); + }); + + function resizeFrame() { + + var heightbody = $('html').height(); + + + var heightframe = heightbody; + + if($("#frameresized").length>0) { + $("#frameresized").height(heightframe); + } + } +{% endblock %} diff --git a/src/ninebadge-1.0/templates/Include/sidebar.html.twig b/src/ninebadge-1.0/templates/Include/sidebar.html.twig index 2055eed..e983b6e 100644 --- a/src/ninebadge-1.0/templates/Include/sidebar.html.twig +++ b/src/ninebadge-1.0/templates/Include/sidebar.html.twig @@ -30,8 +30,15 @@ - {% if appCron %}
  • Outils
  • + +
  • + + API Documentation + +
  • + + {% if appCron %}
  • Jobs diff --git a/src/ninebadge-1.0/templates/Tallyday/month.html.twig b/src/ninebadge-1.0/templates/Tallyday/month.html.twig index b418461..eb8ef2b 100644 --- a/src/ninebadge-1.0/templates/Tallyday/month.html.twig +++ b/src/ninebadge-1.0/templates/Tallyday/month.html.twig @@ -69,6 +69,9 @@ td {
    {{ date.displayname }} +
    + {{date.timemonth}} / {{ timetowork }} +
    diff --git a/src/ninebadge-1.0/templates/Tallyday/tallyday.html.twig b/src/ninebadge-1.0/templates/Tallyday/tallyday.html.twig index d1b7a33..53b50f7 100644 --- a/src/ninebadge-1.0/templates/Tallyday/tallyday.html.twig +++ b/src/ninebadge-1.0/templates/Tallyday/tallyday.html.twig @@ -64,7 +64,8 @@ Début Pointage {% endif %} {% elseif not isvalideuser and not isvalidemaster %} - Fin Pointage + + Fin Pointage {% endif %} @@ -91,7 +92,15 @@ {{tallyday.name}} {% else %} {{tallyday.datestart|date("H:i")}} - {% if tallyday.dateend %} {{tallyday.dateend|date("H:i")}} {%endif%} + + {% if tallyday.dateend %} + {{tallyday.dateend|date("H:i")}} + {% else %} + {% set isrunning=true %} + {% set timedayrunning=tallyday.timeday %} + {% set datestart=tallyday.datestart %} + {%endif%} + {% endif %} {{tallyday.timedayformatted}} @@ -101,8 +110,16 @@
    -
    Temps de travail
    {{timeday}}
    -
    Capital Temps
    {{capitaltime}}
    +
    + Temps de travail +
    {{timeday}}
    +
    +
    +
    + Capital Temps +
    {{capitaltime}}
    +
    +
    {% if not isvalideuser and not isvalidemaster %} Valider ma journée @@ -129,10 +146,37 @@ {% block localjavascript %} var now=new Date(); + var nextrecalcul=new Date(); + var firstrecalcul=true; + function showTime(){ // to get current time/ date. var date = new Date(); + moment(date).set({second:0,millisecond:0}); + + // Recalcul du temps de travail si running + if(firstrecalcul||moment(date).diff(moment(nextrecalcul), "minutes")!=0) { + $.ajax({ + method: "POST", + url: "{{path("app_tallyday_userrecalcul")}}", + success: function(data, dataType) + { + $("#ifstoptimeday").html(""); + $("#ifstopcapitaltime").html(""); + + if(data.success) { + if(data.tosimulatetime) $("#ifstoptimeday").html("Si fin de journée
    >> "+data.timeday+" << "); + if(data.tosimulatecapital) $("#ifstopcapitaltime").html("Si journée validée
    >> "+data.capital+" << "); + } + }, + }); + + nextrecalcul=new Date(); + moment(nextrecalcul).set({second:0,millisecond:0}); + firstrecalcul=false; + } + // Recharger la page au cas où on change de jour if(moment(date).diff(moment(now), "days")!=0) location.reload(); diff --git a/src/ninebadge-1.0/templates/Tallyday/user.html.twig b/src/ninebadge-1.0/templates/Tallyday/user.html.twig index 084cd89..dd8ef15 100644 --- a/src/ninebadge-1.0/templates/Tallyday/user.html.twig +++ b/src/ninebadge-1.0/templates/Tallyday/user.html.twig @@ -83,7 +83,7 @@ de {{tallyday.datestart|date("H:i")}} {%endif%} {% if tallyday.dateend is not null %} - de {{tallyday.dateend|date("H:i")}} + à {{tallyday.dateend|date("H:i")}} {%endif%} {% endif %} = {{tallyday.timedayformatted}}