Compare commits
11 Commits
pkg/stable
...
master
Author | SHA1 | Date | |
---|---|---|---|
ca50af72a1 | |||
138a83e8de | |||
0390c3b474 | |||
50188f1851 | |||
eabb7067a7 | |||
58b4d24098 | |||
3ee638a857 | |||
ed91a16b2b | |||
2878f31113 | |||
28dea4bb81 | |||
3d53772947 |
1
debian/compat
vendored
1
debian/compat
vendored
@ -1 +0,0 @@
|
|||||||
7
|
|
24
debian/control
vendored
24
debian/control
vendored
@ -1,24 +0,0 @@
|
|||||||
Source: eole-ninebadge
|
|
||||||
Section: web
|
|
||||||
Priority: optional
|
|
||||||
Maintainer: Cadoles <contact@cadoles.com>
|
|
||||||
Build-Depends: debhelper (>= 7.0.50)
|
|
||||||
Standards-Version: 3.8.4
|
|
||||||
Homepage: https://forge.cadoles.com/Cadoles/ninebadge
|
|
||||||
Vcs-Git: https://forge.cadoles.com/Cadoles/ninebadge
|
|
||||||
Vcs-Browser: https://forge.cadoles.com/Cadoles/ninebadge
|
|
||||||
|
|
||||||
Package: ninebadge-sso
|
|
||||||
Architecture: all
|
|
||||||
Depends: ${misc:Depends}, eole-sso
|
|
||||||
Description: Filtre SSO pour ninebadge "EOLE".
|
|
||||||
|
|
||||||
Package: eole-ninebadge
|
|
||||||
Architecture: all
|
|
||||||
Depends: ${misc:Depends}, eole-envole-dependances, ninebadge-sso
|
|
||||||
Description: Eolisation de l'application ninebadge.
|
|
||||||
|
|
||||||
Package: ninebadge-apps
|
|
||||||
Architecture: all
|
|
||||||
Depends: ${misc:Depends}, envole-dependances-apps
|
|
||||||
Description: Sources pour ninebadge "EOLE".
|
|
44
debian/copyright
vendored
44
debian/copyright
vendored
@ -1,44 +0,0 @@
|
|||||||
Format: http://dep.debian.net/deps/dep5
|
|
||||||
Upstream-Name: {PROJECT}
|
|
||||||
Source: {URL}
|
|
||||||
|
|
||||||
Files: *
|
|
||||||
Copyright: YEAR {UPSTREAM} {AUTHOR} <{MAIL}>
|
|
||||||
License: {UPSTREAM LICENSE}
|
|
||||||
|
|
||||||
Files: debian/*
|
|
||||||
Copyright: 2012 Équipe EOLE <eole@ac-dijon.fr>
|
|
||||||
License: CeCILL-2
|
|
||||||
|
|
||||||
License: {UPSTREAM LICENSE}
|
|
||||||
{TEXT OF THE LICENSE}
|
|
||||||
|
|
||||||
License: CeCILL-2
|
|
||||||
This software is governed by the CeCILL-2 license under French law and
|
|
||||||
abiding by the rules of distribution of free software. You can use,
|
|
||||||
modify and or redistribute the software under the terms of the CeCILL-2
|
|
||||||
license as circulated by CEA, CNRS and INRIA at the following URL
|
|
||||||
"http://www.cecill.info";.
|
|
||||||
.
|
|
||||||
As a counterpart to the access to the source code and rights to copy,
|
|
||||||
modify and redistribute granted by the license, users are provided only
|
|
||||||
with a limited warranty and the software's author, the holder of the
|
|
||||||
economic rights, and the successive licensors have only limited
|
|
||||||
liability.
|
|
||||||
.
|
|
||||||
In this respect, the user's attention is drawn to the risks associated
|
|
||||||
with loading, using, modifying and/or developing or reproducing the
|
|
||||||
software by the user in light of its specific status of free software,
|
|
||||||
that may mean that it is complicated to manipulate, and that also
|
|
||||||
therefore means that it is reserved for developers and experienced
|
|
||||||
professionals having in-depth computer knowledge. Users are therefore
|
|
||||||
encouraged to load and test the software's suitability as regards their
|
|
||||||
requirements in conditions enabling the security of their systems and/or
|
|
||||||
data to be ensured and, more generally, to use and operate it in the
|
|
||||||
same conditions as regards security.
|
|
||||||
.
|
|
||||||
The fact that you are presently reading this means that you have had
|
|
||||||
knowledge of the CeCILL-2 license and that you accept its terms.
|
|
||||||
.
|
|
||||||
On Eole systems, the complete text of the CeCILL-2 License can be found
|
|
||||||
in '/usr/share/common-licenses/CeCILL-2-en'.
|
|
1
debian/eole-ninebadge.install
vendored
1
debian/eole-ninebadge.install
vendored
@ -1 +0,0 @@
|
|||||||
usr/share/eole
|
|
3
debian/gbp.conf
vendored
3
debian/gbp.conf
vendored
@ -1,3 +0,0 @@
|
|||||||
# Set per distribution debian tag
|
|
||||||
[DEFAULT]
|
|
||||||
debian-tag = debian/envole/%(version)s
|
|
1
debian/ninebadge-apps.install
vendored
1
debian/ninebadge-apps.install
vendored
@ -1 +0,0 @@
|
|||||||
var/www/html
|
|
1
debian/ninebadge-sso.install
vendored
1
debian/ninebadge-sso.install
vendored
@ -1 +0,0 @@
|
|||||||
usr/share/sso
|
|
8
debian/rules
vendored
8
debian/rules
vendored
@ -1,8 +0,0 @@
|
|||||||
#!/usr/bin/make -f
|
|
||||||
# -*- makefile -*-
|
|
||||||
|
|
||||||
# Uncomment this to turn on verbose mode.
|
|
||||||
#export DH_VERBOSE=1
|
|
||||||
|
|
||||||
%:
|
|
||||||
dh $@
|
|
1
debian/source/format
vendored
1
debian/source/format
vendored
@ -1 +0,0 @@
|
|||||||
3.0 (native)
|
|
@ -68,7 +68,10 @@
|
|||||||
"preferred-install": {
|
"preferred-install": {
|
||||||
"*": "dist"
|
"*": "dist"
|
||||||
},
|
},
|
||||||
"sort-packages": true
|
"sort-packages": true,
|
||||||
|
"allow-plugins": {
|
||||||
|
"symfony/flex": true
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
@ -89,6 +92,9 @@
|
|||||||
"symfony/polyfill-php56": "*"
|
"symfony/polyfill-php56": "*"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
"pre-install-cmd": [
|
||||||
|
"php scripts/checkcomposer.php"
|
||||||
|
],
|
||||||
"auto-scripts": {
|
"auto-scripts": {
|
||||||
"cache:clear": "symfony-cmd",
|
"cache:clear": "symfony-cmd",
|
||||||
"cache:clear --env=prod": "symfony-cmd",
|
"cache:clear --env=prod": "symfony-cmd",
|
||||||
|
13
src/ninebadge-1.0/scripts/checkcomposer.php
Normal file
13
src/ninebadge-1.0/scripts/checkcomposer.php
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
$requiredVersion = 'version 1'; // La version interdite
|
||||||
|
|
||||||
|
$composerVersion = trim(shell_exec('COMPOSER_ALLOW_SUPERUSER=1 composer --version --no-ansi'));
|
||||||
|
echo $composerVersion."\n";
|
||||||
|
|
||||||
|
if (stripos($composerVersion,$requiredVersion)===false ) {
|
||||||
|
echo "La version de Composer $requiredVersion n'est pas autorisée" . PHP_EOL;
|
||||||
|
echo "Veuillez mettre à jour Composer avec 'composer self-update --1'." . PHP_EOL;
|
||||||
|
echo "Ou executez le scripts/reconfigure.sh" . PHP_EOL;
|
||||||
|
exit(1); // Quitte avec un code d'erreur
|
||||||
|
}
|
@ -28,6 +28,8 @@ fi
|
|||||||
|
|
||||||
# Installation des dépendances composer
|
# Installation des dépendances composer
|
||||||
echo COMPOSER = Install
|
echo COMPOSER = Install
|
||||||
|
export COMPOSER_ALLOW_SUPERUSER=1
|
||||||
|
composer self-update --1 --quiet
|
||||||
composer install --quiet
|
composer install --quiet
|
||||||
|
|
||||||
php bin/console app:AppInit --env=prod
|
php bin/console app:AppInit --env=prod
|
||||||
|
@ -83,21 +83,36 @@ class BreakdayCommand extends Command
|
|||||||
foreach($users as $user) {
|
foreach($users as $user) {
|
||||||
if(!$user->hasRole("ROLE_USER")) continue;
|
if(!$user->hasRole("ROLE_USER")) continue;
|
||||||
|
|
||||||
$mini=new \Datetime('2022-03-07 00:00');
|
$this->writeln("");
|
||||||
$start=new \Datetime('00:00');
|
$this->writeln($user->getUsername());
|
||||||
$start->modify("monday this week");
|
|
||||||
|
$start=new \Datetime('2022-03-07 00:00');
|
||||||
$end=new \Datetime('00:00');
|
$end=new \Datetime('00:00');
|
||||||
$end->modify("last day of this month");
|
$end->modify("last day of this month");
|
||||||
$end->modify("next sunday");
|
$end->modify("next sunday");
|
||||||
$start->modify("previous month");
|
|
||||||
if($start<$mini) $start=clone $mini;
|
// On récupère la première journée de pointage de l'utilisateur
|
||||||
|
$qb = $this->em->createQueryBuilder()
|
||||||
|
->select('tallyday')
|
||||||
|
->from('App:Tallyday','tallyday')
|
||||||
|
->Where('tallyday.user=:user')
|
||||||
|
->setParameter('user',$user)
|
||||||
|
->orderBy('tallyday.dateof', 'ASC')
|
||||||
|
->setMaxResults(1);
|
||||||
|
|
||||||
|
$datas = $qb->getQuery()->getResult();
|
||||||
|
if(empty($datas)) continue;
|
||||||
|
$firstday=$datas[0]->getDateof();
|
||||||
|
$this->writeln("FIRST DAY = ".$firstday->format("d/m/Y"));
|
||||||
|
|
||||||
$response=$this->api("POST",$url."/getBreakdays",json_encode(["key"=>$key,"username"=>$user->getUsername()]));
|
$response=$this->api("POST",$url."/getBreakdays",json_encode(["key"=>$key,"username"=>$user->getUsername()]));
|
||||||
|
|
||||||
if($response&&$response->code=="200") {
|
if($response&&$response->code=="200") {
|
||||||
while($start<=$end) {
|
while($start<=$end) {
|
||||||
$havebreakday=false;
|
$havebreakday=false;
|
||||||
if($start->format("w")!=0&&$start->format("w")!=6) {
|
$havebreakdayAM=false;
|
||||||
|
$havebreakdayPM=false;
|
||||||
|
|
||||||
|
if($start->format("w")!=0&&$start->format("w")!=6&&$start>=$firstday) {
|
||||||
foreach($response->body->events as $event) {
|
foreach($response->body->events as $event) {
|
||||||
if($event->eventallday) {
|
if($event->eventallday) {
|
||||||
$manip=clone $start;
|
$manip=clone $start;
|
||||||
@ -209,6 +224,7 @@ class BreakdayCommand extends Command
|
|||||||
}
|
}
|
||||||
|
|
||||||
$havebreakday=true;
|
$havebreakday=true;
|
||||||
|
$havebreakdayAM=true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -260,6 +276,7 @@ class BreakdayCommand extends Command
|
|||||||
}
|
}
|
||||||
|
|
||||||
$havebreakday=true;
|
$havebreakday=true;
|
||||||
|
$havebreakdayPM=true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -275,6 +292,31 @@ class BreakdayCommand extends Command
|
|||||||
$this->em->flush();
|
$this->em->flush();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
// Si congés matin mais par l'après midi on supprime un congés potentiel de l'aprés midi
|
||||||
|
if($havebreakdayAM && !$havebreakdayPM) {
|
||||||
|
$manip=clone $start;
|
||||||
|
$manip->setTime(13,30);
|
||||||
|
$tallydays=$this->em->getRepository("App:Tallyday")->findBy(["user"=>$user,"dateof"=>$start,"datestart"=>$manip,"validatemaster"=>false,"isbreakday"=>true]);
|
||||||
|
foreach($tallydays as $tallyday) {
|
||||||
|
$this->em->remove($tallyday);
|
||||||
|
$this->em->flush();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Si congés aprèsmidi mais pas le matin on supprime un congés potentiel du matin
|
||||||
|
if(!$havebreakdayAM && $havebreakdayPM) {
|
||||||
|
$manip=clone $start;
|
||||||
|
$manip->setTime(8,30);
|
||||||
|
$tallydays=$this->em->getRepository("App:Tallyday")->findBy(["user"=>$user,"dateof"=>$start,"datestart"=>$manip,"validatemaster"=>false,"isbreakday"=>true]);
|
||||||
|
foreach($tallydays as $tallyday) {
|
||||||
|
|
||||||
|
$this->em->remove($tallyday);
|
||||||
|
$this->em->flush();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
$start->add(new \DateInterval('P1D'));
|
$start->add(new \DateInterval('P1D'));
|
||||||
}
|
}
|
||||||
|
@ -137,6 +137,8 @@ class TallydayController extends AbstractController
|
|||||||
$users = $em->getRepository("App:User")->findBy([],["firstname"=>"ASC","lastname"=>"ASC"]);
|
$users = $em->getRepository("App:User")->findBy([],["firstname"=>"ASC","lastname"=>"ASC"]);
|
||||||
foreach($users as $user) {
|
foreach($users as $user) {
|
||||||
if($user->hasRole("ROLE_USER")) {
|
if($user->hasRole("ROLE_USER")) {
|
||||||
|
|
||||||
|
|
||||||
$dates[$user->getId()] = [
|
$dates[$user->getId()] = [
|
||||||
"id"=>$user->getId(),
|
"id"=>$user->getId(),
|
||||||
"avatar"=>$user->getAvatar(),
|
"avatar"=>$user->getAvatar(),
|
||||||
@ -276,7 +278,7 @@ class TallydayController extends AbstractController
|
|||||||
if(!$user) return $this->redirectToRoute("app_tallyday_masterlist");
|
if(!$user) return $this->redirectToRoute("app_tallyday_masterlist");
|
||||||
|
|
||||||
// Pas normal = on ne peut créer une donnée sur une journée déjà validé par master
|
// Pas normal = on ne peut créer une donnée sur une journée déjà validé par master
|
||||||
$isvalidemaster= $em->getRepository($this->entity)->findOneBy(["user"=>$this->getUser(),"dateof"=>$dateof,"validatemaster"=>true]);
|
$isvalidemaster= $em->getRepository($this->entity)->findOneBy(["user"=>$user,"dateof"=>$dateof,"validatemaster"=>true]);
|
||||||
if($isvalidemaster) return $this->redirectToRoute("app_tallyday_masterlist");
|
if($isvalidemaster) return $this->redirectToRoute("app_tallyday_masterlist");
|
||||||
|
|
||||||
return $this->submit($user,$dateof,"master",$request);
|
return $this->submit($user,$dateof,"master",$request);
|
||||||
|
@ -37,7 +37,7 @@ class TimeextraType extends AbstractType
|
|||||||
|
|
||||||
$builder->add('hour',
|
$builder->add('hour',
|
||||||
IntegerType::class, [
|
IntegerType::class, [
|
||||||
"label" => "Nombre d'Heure",
|
"label" => "Nombre de Minutes",
|
||||||
"required" => true,
|
"required" => true,
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
@ -65,17 +65,20 @@ class TallydayRepository extends ServiceEntityRepository
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function getCapitaltimeinterval($user,$getnovalidate=false) {
|
public function getCapitaltimeinterval($user,$getnovalidate=false) {
|
||||||
$datenow=new \DateTime('00:00');
|
|
||||||
$datas = $this->_em->getRepository('App:Tallyday')->findBy(["user"=>$user],["datestart"=>"DESC"]);
|
$datas = $this->_em->getRepository('App:Tallyday')->findBy(["user"=>$user],["datestart"=>"DESC"]);
|
||||||
$tbdays=[];
|
$tbdays=[];
|
||||||
$ework = new \DateTime('00:00');
|
|
||||||
|
|
||||||
|
// Cumuler les temps de travail sans fuseau
|
||||||
|
$datenow=new \DateTime('00:00');
|
||||||
|
$ework = new \DateTime('00:00', new \DateTimeZone('UTC'));
|
||||||
|
$i=0;
|
||||||
foreach($datas as $data) {
|
foreach($datas as $data) {
|
||||||
if($data->getDateof()<$datenow) {
|
if($data->getDateof()<$datenow) {
|
||||||
$iddayweek=$data->getDateof()->format("w");
|
$iddayweek=$data->getDateof()->format("w");
|
||||||
if($iddayweek>=1&&$iddayweek<=5) {
|
if($iddayweek>=1&&$iddayweek<=5) {
|
||||||
if(!in_array($data->getDateof(),$tbdays)) array_push($tbdays,$data->getDateof());
|
if(!in_array($data->getDateof(),$tbdays)) array_push($tbdays,$data->getDateof());
|
||||||
}
|
}
|
||||||
|
|
||||||
$ework->add($data->getTimeday());
|
$ework->add($data->getTimeday());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -84,19 +87,25 @@ class TallydayRepository extends ServiceEntityRepository
|
|||||||
if($iddayweek>=1&&$iddayweek<=5) {
|
if($iddayweek>=1&&$iddayweek<=5) {
|
||||||
if(!in_array($data->getDateof(),$tbdays)) array_push($tbdays,$data->getDateof());
|
if(!in_array($data->getDateof(),$tbdays)) array_push($tbdays,$data->getDateof());
|
||||||
}
|
}
|
||||||
|
|
||||||
$ework->add($data->getTimeday());
|
$ework->add($data->getTimeday());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Enlever du temps travailler les heures sup payé
|
// Enlever du temps travailler les minutes sup payé
|
||||||
$timeextra=$this->_em->getRepository("App:Timeextra")->getTimeextrauser($user, new \DateTime());
|
$timeextra=$this->_em->getRepository("App:Timeextra")->getTimeextrauser($user, new \DateTime());
|
||||||
if($timeextra[1]) {
|
if($timeextra[1]>0) {
|
||||||
$ework->sub(new \DateInterval("PT".$timeextra[1]."H"));
|
$ework->sub(new \DateInterval("PT".$timeextra[1]."M"));
|
||||||
|
}
|
||||||
|
// Ajouter du temps sur des heures supplémentaires majorées
|
||||||
|
else {
|
||||||
|
$ework->add(new \DateInterval("PT".($timeextra[1]*-1)."M"));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Nbday worked
|
// Nbday worked
|
||||||
$nbdaywork=count($tbdays);
|
$nbdaywork=count($tbdays);
|
||||||
$etowork = new \DateTime('00:00');
|
|
||||||
|
$etowork = new \DateTime('00:00', new \DateTimeZone('UTC'));
|
||||||
$etowork->add(new \DateInterval("PT".($nbdaywork*7)."H"));
|
$etowork->add(new \DateInterval("PT".($nbdaywork*7)."H"));
|
||||||
|
|
||||||
$interval = $etowork->diff($ework);
|
$interval = $etowork->diff($ework);
|
||||||
|
@ -19,13 +19,21 @@ td {
|
|||||||
{% if fgprint %}color:#000000 !important;{%endif%}
|
{% if fgprint %}color:#000000 !important;{%endif%}
|
||||||
}
|
}
|
||||||
|
|
||||||
{% if fgprint %}
|
@media print {
|
||||||
|
.noprint { display:none; }
|
||||||
|
body,h1,.card-header {font-family: 'arial' !important}
|
||||||
|
|
||||||
.card {float: none !important; }
|
.card {float: none !important; }
|
||||||
.card, .card-header {border: none;}
|
.card, .card-header {border: none;}
|
||||||
.breakpage {
|
.breakpage {
|
||||||
page-break-after: always;
|
page-break-after: always;
|
||||||
}
|
}
|
||||||
{% endif %}
|
.nobreakpage{
|
||||||
|
page-break-after: unset;
|
||||||
|
}
|
||||||
|
.card-body {padding:0px;}
|
||||||
|
.fulltable{width:100%;}
|
||||||
|
}
|
||||||
|
|
||||||
.date {
|
.date {
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
@ -43,23 +51,26 @@ td {
|
|||||||
RAPPORT MENSUEL = {{ monthof|date("m/Y") }}
|
RAPPORT MENSUEL = {{ monthof|date("m/Y") }}
|
||||||
</h1>
|
</h1>
|
||||||
|
|
||||||
|
<div class="noprint">
|
||||||
{% if not fgprint %}
|
{% if not fgprint %}
|
||||||
<a class="btn btn-secondary mr-2" href={{ path('app_tallyday') }}>Retour</a>
|
<a class="btn btn-secondary mr-2" href={{ path('app_tallyday') }}>Retour</a>
|
||||||
<a class="btn btn-secondary mr-2" href={{ path('app_tallyday_mastermonth',{monthof:prevmonth}) }}>Mois Précédent</a>
|
<a class="btn btn-secondary mr-2" href={{ path('app_tallyday_mastermonth',{monthof:prevmonth}) }}>Mois Précédent</a>
|
||||||
<a class="btn btn-secondary mr-2" href={{ path('app_tallyday_mastermonth',{monthof:nextmonth}) }}>Mois Suivant</a>
|
<a class="btn btn-secondary mr-2" href={{ path('app_tallyday_mastermonth',{monthof:nextmonth}) }}>Mois Suivant</a>
|
||||||
<a class="btn btn-secondary mr-2" href={{ path('app_tallyday_mastermonth',{monthof:monthof|date("Ym"),type:"pdf"}) }}>Export PDF</a>
|
<!-- <a class="btn btn-secondary mr-2" href={{ path('app_tallyday_mastermonth',{monthof:monthof|date("Ym"),type:"pdf"}) }}>Export PDF</a> -->
|
||||||
|
<a id="btnprint" class="btn btn-secondary mr-2" href="#">Imprimer</a>
|
||||||
|
|
||||||
<a class="btn btn-secondary float-right" href={{ path('app_tallyday_masterexport') }}>Export CSV</a>
|
|
||||||
<a class="btn btn-secondary float-right mr-2" href={{ path('app_tallyday_masterlist') }}>Gestion des Pointages</a>
|
|
||||||
<a class="btn btn-secondary float-right mr-2" href={{ path('app_timeextra') }}>Gestion Heures Sup</a>
|
|
||||||
{% if message is defined and not message is empty %}
|
|
||||||
<div class='alert alert-danger' style='margin: 5px 0px'>
|
|
||||||
<strong>Erreur</strong><br>
|
|
||||||
{{ message|raw }}<br>
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
|
<a class="btn btn-secondary float-right" href={{ path('app_tallyday_masterexport') }}>Export CSV</a>
|
||||||
|
<a class="btn btn-secondary float-right mr-2" href={{ path('app_tallyday_masterlist') }}>Gestion des Pointages</a>
|
||||||
|
<a class="btn btn-secondary float-right mr-2" href={{ path('app_timeextra') }}>Gestion Heures Sup</a>
|
||||||
|
{% if message is defined and not message is empty %}
|
||||||
|
<div class='alert alert-danger' style='margin: 5px 0px'>
|
||||||
|
<strong>Erreur</strong><br>
|
||||||
|
{{ message|raw }}<br>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="mt-3" style="margin:auto; max-width:1810px;">
|
<div class="mt-3" style="margin:auto; max-width:1810px;">
|
||||||
{% set nbusers=0 %}
|
{% set nbusers=0 %}
|
||||||
@ -67,16 +78,16 @@ td {
|
|||||||
{% if date.validates %}
|
{% if date.validates %}
|
||||||
{% set nbusers=nbusers+1 %}
|
{% set nbusers=nbusers+1 %}
|
||||||
|
|
||||||
<div class="card mr-1 mb-1 float-left {% if nbusers==2 %}breakpage{% endif %} ">
|
<div class="card mr-1 mb-1 float-left {% if nbusers==2 %}breakpage{%else%}nobreakpage{% endif %} ">
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<img src="{{date.avatar|urlavatar}}" class="avatar"> {{ date.displayname }}
|
{% if not fgprint %} <img src="{{date.avatar|urlavatar}}" class="avatar noprint">{%endif%} {{ date.displayname }}
|
||||||
<div class="float-right text-right">
|
<div class="float-right text-right">
|
||||||
{{date.timemonth}} / {{ timetowork }}
|
{{date.timemonth}} / {{ timetowork }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<table>
|
<table class="fulltable">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th style="width:50px !important">s</th>
|
<th style="width:50px !important">s</th>
|
||||||
@ -104,13 +115,14 @@ td {
|
|||||||
{{validate.dateof|date("W")}}
|
{{validate.dateof|date("W")}}
|
||||||
</td>
|
</td>
|
||||||
|
|
||||||
{% if loop.first %}
|
|
||||||
{% for i in 2..(validate.dateof|date("N")) %}
|
|
||||||
<td></td>
|
|
||||||
{% endfor %}
|
|
||||||
{%endif %}
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
{% if loop.first and validate.dateof|date("l")!="Monday"%}
|
||||||
|
{% for i in 2..(validate.dateof|date("N")) %}
|
||||||
|
<td></td>
|
||||||
|
{% endfor %}
|
||||||
|
{%endif %}
|
||||||
|
|
||||||
<td style="align:top">
|
<td style="align:top">
|
||||||
<div class="date">{{validate.dateof|date("d/m")}}</div>
|
<div class="date">{{validate.dateof|date("d/m")}}</div>
|
||||||
<div class="datedetail" style="min-height:28px">
|
<div class="datedetail" style="min-height:28px">
|
||||||
@ -201,6 +213,11 @@ td {
|
|||||||
maxheight=$(this).height();
|
maxheight=$(this).height();
|
||||||
});
|
});
|
||||||
$( ".card" ).height(maxheight);
|
$( ".card" ).height(maxheight);
|
||||||
|
|
||||||
|
$("#btnprint").click(function(){
|
||||||
|
window.print();
|
||||||
|
return false;
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
@ -28,7 +28,7 @@ GESTION DES HEURES SUPPLEMENTAIRES
|
|||||||
<th width="70px" class="no-sort">Action</th>
|
<th width="70px" class="no-sort">Action</th>
|
||||||
<th>Utilisateur</th>
|
<th>Utilisateur</th>
|
||||||
<th>Date</th>
|
<th>Date</th>
|
||||||
<th>Nb Heure</th>
|
<th>Nb Minutes</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
Reference in New Issue
Block a user