+++ /dev/null
-PDF_TOP="20mm"
-PDF_BOTTOM="15mm"
-PDF_LEFT="5mm"
-PDF_RIGHT="5mm"
-PDF_SIZE="A4"
-PDF_ORIENTATION="Landscape"
-PDF_ENGINE="Template::Toolkit"
-PDF_ENCODING="UTF-8"
-TEMPLATE_DSN=""
-TEMPLATE_DBUSER=""
-TEMPLATE_DBPASSWORD=""
-REPORT_NAME="POT Periode par Staff"
\ No newline at end of file
+++ /dev/null
-<!DOCTYPE html>
-<html>
-<head>
-<meta charset="UTF-8">
-<script>
-function subst() {
- var vars = {};
- var query_strings_from_url = document.location.search.substring(1).split('&');
- for (var query_string in query_strings_from_url) {
- if (query_strings_from_url.hasOwnProperty(query_string)) {
- var temp_var = query_strings_from_url[query_string].split('=', 2);
- vars[temp_var[0]] = decodeURI(temp_var[1]);
- }
- }
- var css_selector_classes = ['page', 'frompage', 'topage', 'webpage', 'section', 'subsection', 'date', 'isodate', 'time', 'title', 'doctitle', 'sitepage', 'sitepages'];
- for (var css_class in css_selector_classes) {
- if (css_selector_classes.hasOwnProperty(css_class)) {
- var element = document.getElementsByClassName(css_selector_classes[css_class]);
- for (var j = 0; j < element.length; ++j) {
- element[j].textContent = vars[css_selector_classes[css_class]];
- }
- }
- }
-}
-</script></head>
-<body style="border:0; margin: 0;" onload="subst()">
-<table style="width: 100%;" >
- <tr><td colspan="2" style="text-align: right;font-size: 8pt;"><span class="date"></span> <span class="time"></span></td></tr>
- <tr>
- <td></td>
- <td style="text-align:right;font-size: 8pt;">
- Page <span class="page"></span>/<span class="topage"></span>
- </td>
- </tr>
-</table>
-</body></html>
\ No newline at end of file
+++ /dev/null
-[% USE DBI %]
-[% USE dksdb = DBI(dsn, dbuser, dbpassword) %]
-[% qgcompany = dksdb.prepare("select * from companies WHERE schemata= ?") %]
-[% gcompany = qgcompany.execute(schemata) %]
-[% cmp = gcompany.get_all() %]
-[% #qreport = dksdb.prepare("select to_char(startdate,'DD.MM.YYYY') as startdate, to_char(enddate,'DD.MM.YYYY') as enddate from ${schemata}.reportperiod WHERE id= ?") %]
-[% #grep = qreport.execute(id_reportperiod) %]
-[% #rep = grep.get_all() %]
-<!DOCTYPE html>
-<html><head>
-<meta charset="UTF-8">
-</head><body style="border:0; margin: 0;" o>
-<table style="width: 100%;">
- <tr>
- <td style="width: 150mm; margin-top:5mm;">
- <h4>Plan d'Organisation du Travail<h4>
- </td>
- <td style="width: 60mm;text-align: right;">
- <div style="text-align: left;width: 60mm; font-size: 8pt;font: sans;">
- <b>[% cmp.0.company %] [% cmp.0.socialtype %]</b><br/>
- [% cmp.0.address %]<br/>
- [% cmp.0.zip %] [% cmp.0.city%]<br/><br/>
- </div>
- </td>
- <tr><td style="text-align: left;"></td><td></td></tr>
- </tr>
-</table>
-</body></html>
+++ /dev/null
-[% USE DBI %]
-[% USE dksdb = DBI(dsn, dbuser, dbpassword) %]
-
-<!DOCTYPE html>
-<html>
-<head>
- <title>POT - Staffmember - Period</title>
- <style>
- @font-face {
- font-family: 'pot';
- src: url("data:font/ttf;base64,AAEAAAALAIAAAwAwT1MvMg8SBSoAAAC8AAAAYGNtYXAXVtKHAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5Zq3RsYsAAAF4AAAB0GhlYWQZavrxAAADSAAAADZoaGVhB4IDxgAAA4AAAAAkaG10eAoAAEAAAAOkAAAAFGxvY2EAKAD8AAADuAAAAAxtYXhwAAkAigAAA8QAAAAgbmFtZVKkxIkAAAPkAAABVnBvc3QAAwAAAAAFPAAAACAAAwMAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpAAPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6QD//f//AAAAAAAg6QD//f//AAH/4xcEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAADAED/wAPAA8AACgA3AIcAAAEOAQczMjY1NCYjJSIGBw4BBw4BNz4BNQ4BBxYXHgEXFjMyNz4BNzY3LgEnDgEHDgE3PgE1LgEjEzIWBwYHBhYXFhceARUOAQczMhYVFAYrAQYHDgEHBiMiJy4BJyYnNDc+ATc2Ny4BJyY2Nz4BMzIWBwYHBhYXFhc+ATMyFhcuAScmNjc+ATMDLAoZEEUfLS0f/oMQHw8BGR4HNBEbFGJtCgYYGFI7O0xMOztSGBgFCFtRAxkbCDMRGxQXMRudCQgILgwLDA8PB2mGAgYDBzZMTDZgGyAgSCgoKklBQGciIwsTFEYwMDkJGQcPKDMEFQkJCAksDAwKDg8IESERFywVCRgHDyc0BBQJAWsqTiQuICAu0gEBHDQXBwMOFTAZCy8OCQ4NGQkJCQkZDQ4JDSoMGS8VBwMOFTEaAgMBgwUHIygnVCorKRBDKhUnFE44OE4yKCc4Dw8rK5dnZ3cXFBQiDA0HHz8eQWAoAwUFByInJlIpKigBAQICHj4dQWAoAwUAAAEAAAABAACaNXijXw889QALBAAAAAAA20XbOgAAAADbRds6AAD/wAPAA8AAAAAIAAIAAAAAAAAAAQAAA8D/wAAABAAAAAAAA8AAAQAAAAAAAAAAAAAAAAAAAAUEAAAAAAAAAAAAAAACAAAABAAAQAAAAAAACgAUAB4A6AABAAAABQCIAAMAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEAAwAAAAEAAAAAAAIABwA8AAEAAAAAAAMAAwAqAAEAAAAAAAQAAwBRAAEAAAAAAAUACwAJAAEAAAAAAAYAAwAzAAEAAAAAAAoAGgBaAAMAAQQJAAEABgADAAMAAQQJAAIADgBDAAMAAQQJAAMABgAtAAMAAQQJAAQABgBUAAMAAQQJAAUAFgAUAAMAAQQJAAYABgA2AAMAAQQJAAoANAB0cG90AHAAbwB0VmVyc2lvbiAxLjAAVgBlAHIAcwBpAG8AbgAgADEALgAwcG90AHAAbwB0cG90AHAAbwB0UmVndWxhcgBSAGUAZwB1AGwAYQBycG90AHAAbwB0Rm9udCBnZW5lcmF0ZWQgYnkgSWNvTW9vbi4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==") format('truetype');
-
- font-weight: normal;
- font-style: normal;
- font-display: block;
-}
-
-[class^="icon-"], [class*=" icon-"] {
- /* use !important to prevent issues with browser extensions that change fonts */
- font-family: 'pot' !important;
- speak: never;
- font-style: normal;
- font-weight: normal;
- font-variant: normal;
- text-transform: none;
- line-height: 1;
-
- /* Better Font Rendering =========== */
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-
-.icon-pause:before {
- content: "\e900";
-}
-
- div {
- font-size: 12pt;
- }
-table {
- font-size: 8pt;
- border-spacing: 0;
- border-collapse: collapse;
- border: none;
- width: 100%;
-}
-th {
- border: 1px solid black;
-}
-td {
- text-align: center;
- border: 1px solid black;
-}
-
-.right{
- text-align: right;
-}
-
-table.tbinline {
- border-collapse: collapse;
-}
-table.tbinline td {
- border: 0.5px solid #969696;
-}
-table.tbinline tr:first-child td {
- border-top: 0;
-}
-table.tbinline tr td:first-child {
- border-left: 0;
-}
-table.tbinline tr:last-child td {
- border-bottom: 0;
-}
-table.tbinline tr td:last-child {
- border-right: 0;
-}
-/*table#tbl_products {
- border-spacing: 0;
- border-collapse: 0;
- margin-top: 10mm;
- width: 100%;
-} */
-
-/*table#tbl_products td {
- padding: 2mm;
- border-bottom: 1px solid black;
-}*/
-
-/*table#tbl_products th {
- margin: 1mm;
- border: 1px solid #fff;
- border-bottom: 0px;
- padding: 2mm;
- background-color: #c6c6c6;
-}*/
-td.datavalues {
- font-size: 8pt;
- /*padding: 3px;*/
-}
-table { page-break-inside:auto }
-tr { page-break-inside:avoid; page-break-after:auto }
-thead { display:table-header-group }
-tfoot { display:table-footer-group }
-.page-break { display: block; page-break-before: always; }
- </style>
-</head>
-<body>
-
- [% stafflist = dksdb.prepare("select distinct(spd.id_staff),st.surname,st.prename,spd.id_reportperiod,spd.periodstart,spd.periodend from ${schemata}.vw_staffreportperioddays spd left join ${schemata}.staff st on (spd.id_staff=st.id) where spd.id_reportperiod in (${id_periodlist}) and spd.id_staff = ? order by st.surname,st.prename,spd.periodstart asc;") %]
- [% staffmemberperiod = dksdb.prepare("select st.prename,st.surname,spd.* from ${schemata}.vw_staffreportperioddays spd left join ${schemata}.staff st on (spd.id_staff=st.id) where spd.id_reportperiod= ? and spd.id_staff= ? order by spd.daydate asc;") %]
- [% staffperiodsums = dksdb.prepare("select * from ${schemata}.vw_staffreportperiodlist where id_reportperiod=? and id_staff=?;") %]
-
- [% FOREACH wl = stafflist.execute(id_staff) %]
- <table>
- <thead>
- <tr ><th colspan="5" style="border-right: 0px;font-size: 10pt;">[% wl.periodstart %] - [% wl.periodend %]</th><th colspan="4" style="border-left: 0px;text-align: right;font-size: 10pt;">[% wl.surname %] [% wl.prename %]</th></tr>
- <tr><th>Semaine</th>
- <th>Lundi</th>
- <th>Mardi</th>
- <th>Mecredi</th>
- <th>Jeudi</th>
- <th>Vendredi</th>
- <th>Samedi</th>
- <th>Dimanche</th>
- <th>Totaux</th></tr>
- </thead>
- <tbody>
- [% wdk = 0 %]
- [% FOREACH pw = staffmemberperiod.execute(wl.id_reportperiod,id_staff) %]
- [% wd = pw.weekdates.split(',') %]
- [% IF wdk == 0 %]
- [% dspwd = pw.dspweekdates.split(',') %]
- <tr><th rowspan="2">[% pw.dspweekshort %]</th>
- <th>[% dspwd.0 %]</th>
- <th>[% dspwd.1 %]</th>
- <th>[% dspwd.2 %]</th>
- <th>[% dspwd.3 %]</th>
- <th>[% dspwd.4 %]</th>
- <th>[% dspwd.5 %]</th>
- <th>[% dspwd.6 %]</th>
- <th></th></tr><tr>
- [% END %]
-
- [% WHILE pw.daydate != wd.$wdk and wdk < 7 %]
- <td> </td>
- [% wdk = wdk + 1 %]
- [% END %]
-
- [% IF wdk < 7 %]
- [% IF pw.timestart1 %]
- <td>
- <table class="tbinline">
- <tr>
- <td class="datavalues">[% pw.timestart1 %]</td>
- <td class="datavalues">[% pw.timeend1 %]</td>
- <td class="datavalues">[% IF pw.workhours %]<span style="font-weight: bold;">[% pw.workhours %]</span>[% ELSE %] [% END %]</td>
- </tr>
- <tr>
- <td class="datavalues"> [% IF pw.timestart2 %][% pw.timestart2 %][% END %]</td>
- <td class="datavalues">[% IF pw.timestart2 %][% pw.timeend2 %][% ELSE %] [% END %]</td>
- <td class="datavalues" >[% IF pw.recuperationhours %]<span style="text-decoration: underline;">[% pw.recuperationhours %]</span>[% ELSE %] [% END %]</td>
- </tr>
- <tr>
- <td> </td>
- <td> </td>
- <td class="datavalues" >[% IF pw.vacancyhours %]<span style="font-style: italic;">[% pw.vacancyhours %][%ELSE%] [% END %]</td>
- </tr>
- <tr>
- <td style="text-align: right;">[% IF pw.timepause %]<span class="icon-pause"></span>[% END %]</td>
- <td class="datavalues">[% IF pw.timepause %][% pw.timepause %][% END %]</td>
- <td> </td>
- </tr>
- </table>
- </td>
- [% ELSE %]
- <td> </td>
- [% END %]
- [% END %]
-
- [% wdk = wdk + 1 %]
- [% IF wdk >= 7 %]
- <td class="datavalues">
- <table class="tbinline">
- <!--<tr><td class="datavalues">[% IF pw.week_workhours && pw.week_workhours != "00:00" %]T: [% pw.week_workhours %][%END %]</td></tr>-->
- <tr><td class="datavalues" >[% IF pw.week_totalhours && pw.week_totalhours != "00:00" %]<span style="font-weight: bold;">[% pw.week_totalhours %]</span>[% ELSE %] [%END %]</td></tr>
- <tr><td class="datavalues" >[% IF pw.week_recuperationhours && pw.week_recuperationhours != "00:00" %]<span style="font-weight: bold;text-decoration: underline;">[% pw.week_recuperationhours %]</span>[% ELSE %] [%END %]</td></tr>
- <tr><td class="datavalues" >[% IF pw.week_vacancyhours && pw.week_vacancyhours != "00:00" %]<span style="font-weight: bold;font-style: italic;">[% pw.week_vacancyhours %]</span>[% ELSE %] [%END %]</td></tr>
- <tr><td class="datavalues" >[% IF pw.week_diffhours && pw.week_diffhours != "00:00" %]<span style="font-weight: bold;text-decoration: underline;text-decoration-style: double;">[% pw.week_diffhours %]</span>[% ELSE %] [%END %]</td></tr>
- </table>
- </td></tr>
- [% wdk = 0 %]
- [% END %]
- [% END %]
- </tbody>
- </table>
- [% sptotal = staffperiodsums.execute(wl.id_reportperiod,id_staff) %]
- [% spt = sptotal.get_all() %]
- <table>
- <thead>
- <tr><th colspan="14">Totaux heures pour la période: [% wl.periodstart %] - [% wl.periodend %]</th></tr>
- <tr>
- <td style="text-align: right;">contractuelles:</td>
- <th style="width: 15mm;">[% spt.0.contracthours %]</th>
- <td style="text-align: right;">travaillées:</td>
- <th style="width: 15mm;">[% spt.0.workhours %]</th>
- <td style="text-align: right;">Congés:</td>
- <th style="width: 15mm;">[% spt.0.vacancyhours %]</th>
- <td style="text-align: right;">Récupérées:</td>
- <th style="width: 15mm;">[% spt.0.recuperationhours %]</th>
- <td style="text-align: right;">Total:</td>
- <th style="width: 15mm;">[% spt.0.totalhours %]</th>
- <td style="text-align: right;">Payées:</td>
- <th style="width: 15mm;">[% spt.0.payedhours %]</th>
- <td style="text-align: right;">à récupérer:</td>
- <th style="width: 15mm;">[% spt.0.hoursdiff %]</th>
- </tr>
- </thead>
- </table>
- <div class="page-break"></div>
- [% END %]
-</body>
-</html>
\ No newline at end of file
+++ /dev/null
-data:application/octet-stream;base64,AAEAAAALAIAAAwAwT1MvMg8SBSoAAAC8AAAAYGNtYXAXVtKHAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5Zq3RsYsAAAF4AAAB0GhlYWQZavrxAAADSAAAADZoaGVhB4IDxgAAA4AAAAAkaG10eAoAAEAAAAOkAAAAFGxvY2EAKAD8AAADuAAAAAxtYXhwAAkAigAAA8QAAAAgbmFtZVKkxIkAAAPkAAABVnBvc3QAAwAAAAAFPAAAACAAAwMAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpAAPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6QD//f//AAAAAAAg6QD//f//AAH/4xcEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAADAED/wAPAA8AACgA3AIcAAAEOAQczMjY1NCYjJSIGBw4BBw4BNz4BNQ4BBxYXHgEXFjMyNz4BNzY3LgEnDgEHDgE3PgE1LgEjEzIWBwYHBhYXFhceARUOAQczMhYVFAYrAQYHDgEHBiMiJy4BJyYnNDc+ATc2Ny4BJyY2Nz4BMzIWBwYHBhYXFhc+ATMyFhcuAScmNjc+ATMDLAoZEEUfLS0f/oMQHw8BGR4HNBEbFGJtCgYYGFI7O0xMOztSGBgFCFtRAxkbCDMRGxQXMRudCQgILgwLDA8PB2mGAgYDBzZMTDZgGyAgSCgoKklBQGciIwsTFEYwMDkJGQcPKDMEFQkJCAksDAwKDg8IESERFywVCRgHDyc0BBQJAWsqTiQuICAu0gEBHDQXBwMOFTAZCy8OCQ4NGQkJCQkZDQ4JDSoMGS8VBwMOFTEaAgMBgwUHIygnVCorKRBDKhUnFE44OE4yKCc4Dw8rK5dnZ3cXFBQiDA0HHz8eQWAoAwUFByInJlIpKigBAQICHj4dQWAoAwUAAAEAAAABAACaNXijXw889QALBAAAAAAA20XbOgAAAADbRds6AAD/wAPAA8AAAAAIAAIAAAAAAAAAAQAAA8D/wAAABAAAAAAAA8AAAQAAAAAAAAAAAAAAAAAAAAUEAAAAAAAAAAAAAAACAAAABAAAQAAAAAAACgAUAB4A6AABAAAABQCIAAMAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEAAwAAAAEAAAAAAAIABwA8AAEAAAAAAAMAAwAqAAEAAAAAAAQAAwBRAAEAAAAAAAUACwAJAAEAAAAAAAYAAwAzAAEAAAAAAAoAGgBaAAMAAQQJAAEABgADAAMAAQQJAAIADgBDAAMAAQQJAAMABgAtAAMAAQQJAAQABgBUAAMAAQQJAAUAFgAUAAMAAQQJAAYABgA2AAMAAQQJAAoANAB0cG90AHAAbwB0VmVyc2lvbiAxLjAAVgBlAHIAcwBpAG8AbgAgADEALgAwcG90AHAAbwB0cG90AHAAbwB0UmVndWxhcgBSAGUAZwB1AGwAYQBycG90AHAAbwB0Rm9udCBnZW5lcmF0ZWQgYnkgSWNvTW9vbi4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
\ No newline at end of file
+++ /dev/null
-PDF_TOP="20mm"
-PDF_BOTTOM="15mm"
-PDF_LEFT="5mm"
-PDF_RIGHT="5mm"
-PDF_SIZE="A4"
-PDF_ORIENTATION="Landscape"
-PDF_ENGINE="Template::Toolkit"
-PDF_ENCODING="UTF-8"
-TEMPLATE_DSN=""
-TEMPLATE_DBUSER=""
-TEMPLATE_DBPASSWORD=""
-REPORT_NAME="POT periodes par salarié"
\ No newline at end of file
+++ /dev/null
-<!DOCTYPE html>
-<html>
-<head>
-<meta charset="UTF-8">
-<script>
-function subst() {
- var vars = {};
- var query_strings_from_url = document.location.search.substring(1).split('&');
- for (var query_string in query_strings_from_url) {
- if (query_strings_from_url.hasOwnProperty(query_string)) {
- var temp_var = query_strings_from_url[query_string].split('=', 2);
- vars[temp_var[0]] = decodeURI(temp_var[1]);
- }
- }
- var css_selector_classes = ['page', 'frompage', 'topage', 'webpage', 'section', 'subsection', 'date', 'isodate', 'time', 'title', 'doctitle', 'sitepage', 'sitepages'];
- for (var css_class in css_selector_classes) {
- if (css_selector_classes.hasOwnProperty(css_class)) {
- var element = document.getElementsByClassName(css_selector_classes[css_class]);
- for (var j = 0; j < element.length; ++j) {
- element[j].textContent = vars[css_selector_classes[css_class]];
- }
- }
- }
-}
-</script></head>
-<body style="border:0; margin: 0;" onload="subst()">
-<table style="width: 100%;" >
- <tr><td colspan="2" style="text-align: right;font-size: 8pt;"><span class="date"></span> <span class="time"></span></td></tr>
- <tr>
- <td></td>
- <td style="text-align:right;font-size: 8pt;">
- Page <span class="page"></span>/<span class="topage"></span>
- </td>
- </tr>
-</table>
-</body></html>
\ No newline at end of file
+++ /dev/null
-[% USE DBI %]
-[% USE dksdb = DBI(dsn, dbuser, dbpassword) %]
-[% qgcompany = dksdb.prepare("select * from companies WHERE schemata= ?") %]
-[% gcompany = qgcompany.execute(schemata) %]
-[% cmp = gcompany.get_all() %]
-[% #qreport = dksdb.prepare("select to_char(startdate,'DD.MM.YYYY') as startdate, to_char(enddate,'DD.MM.YYYY') as enddate from ${schemata}.reportperiod WHERE id= ?") %]
-[% #grep = qreport.execute(id_reportperiod) %]
-[% #rep = grep.get_all() %]
-<!DOCTYPE html>
-<html><head>
-<meta charset="UTF-8">
-</head><body style="border:0; margin: 0;" o>
-<table style="width: 100%;">
- <tr>
- <td style="width: 150mm; margin-top:5mm;">
- <h4>Plan d'Organisation du Travail<h4>
- </td>
- <td style="width: 60mm;text-align: right;">
- <div style="text-align: left;width: 60mm; font-size: 8pt;font: sans;">
- <b>[% cmp.0.company %] [% cmp.0.socialtype %]</b><br/>
- [% cmp.0.address %]<br/>
- [% cmp.0.zip %] [% cmp.0.city%]<br/><br/>
- </div>
- </td>
- <tr><td style="text-align: left;"></td><td></td></tr>
- </tr>
-</table>
-</body></html>
+++ /dev/null
-[% USE DBI %]
-[% USE dksdb = DBI(dsn, dbuser, dbpassword) %]
-
-<!DOCTYPE html>
-<html>
-<head>
- <title>POT - Staffmember - Period</title>
- <style>
- @font-face {
- font-family: 'pot';
- src: url("data:font/ttf;base64,AAEAAAALAIAAAwAwT1MvMg8SBSoAAAC8AAAAYGNtYXAXVtKHAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5Zq3RsYsAAAF4AAAB0GhlYWQZavrxAAADSAAAADZoaGVhB4IDxgAAA4AAAAAkaG10eAoAAEAAAAOkAAAAFGxvY2EAKAD8AAADuAAAAAxtYXhwAAkAigAAA8QAAAAgbmFtZVKkxIkAAAPkAAABVnBvc3QAAwAAAAAFPAAAACAAAwMAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpAAPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6QD//f//AAAAAAAg6QD//f//AAH/4xcEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAADAED/wAPAA8AACgA3AIcAAAEOAQczMjY1NCYjJSIGBw4BBw4BNz4BNQ4BBxYXHgEXFjMyNz4BNzY3LgEnDgEHDgE3PgE1LgEjEzIWBwYHBhYXFhceARUOAQczMhYVFAYrAQYHDgEHBiMiJy4BJyYnNDc+ATc2Ny4BJyY2Nz4BMzIWBwYHBhYXFhc+ATMyFhcuAScmNjc+ATMDLAoZEEUfLS0f/oMQHw8BGR4HNBEbFGJtCgYYGFI7O0xMOztSGBgFCFtRAxkbCDMRGxQXMRudCQgILgwLDA8PB2mGAgYDBzZMTDZgGyAgSCgoKklBQGciIwsTFEYwMDkJGQcPKDMEFQkJCAksDAwKDg8IESERFywVCRgHDyc0BBQJAWsqTiQuICAu0gEBHDQXBwMOFTAZCy8OCQ4NGQkJCQkZDQ4JDSoMGS8VBwMOFTEaAgMBgwUHIygnVCorKRBDKhUnFE44OE4yKCc4Dw8rK5dnZ3cXFBQiDA0HHz8eQWAoAwUFByInJlIpKigBAQICHj4dQWAoAwUAAAEAAAABAACaNXijXw889QALBAAAAAAA20XbOgAAAADbRds6AAD/wAPAA8AAAAAIAAIAAAAAAAAAAQAAA8D/wAAABAAAAAAAA8AAAQAAAAAAAAAAAAAAAAAAAAUEAAAAAAAAAAAAAAACAAAABAAAQAAAAAAACgAUAB4A6AABAAAABQCIAAMAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEAAwAAAAEAAAAAAAIABwA8AAEAAAAAAAMAAwAqAAEAAAAAAAQAAwBRAAEAAAAAAAUACwAJAAEAAAAAAAYAAwAzAAEAAAAAAAoAGgBaAAMAAQQJAAEABgADAAMAAQQJAAIADgBDAAMAAQQJAAMABgAtAAMAAQQJAAQABgBUAAMAAQQJAAUAFgAUAAMAAQQJAAYABgA2AAMAAQQJAAoANAB0cG90AHAAbwB0VmVyc2lvbiAxLjAAVgBlAHIAcwBpAG8AbgAgADEALgAwcG90AHAAbwB0cG90AHAAbwB0UmVndWxhcgBSAGUAZwB1AGwAYQBycG90AHAAbwB0Rm9udCBnZW5lcmF0ZWQgYnkgSWNvTW9vbi4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==") format('truetype');
-
- font-weight: normal;
- font-style: normal;
- font-display: block;
-}
-
-[class^="icon-"], [class*=" icon-"] {
- /* use !important to prevent issues with browser extensions that change fonts */
- font-family: 'pot' !important;
- speak: never;
- font-style: normal;
- font-weight: normal;
- font-variant: normal;
- text-transform: none;
- line-height: 1;
-
- /* Better Font Rendering =========== */
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-
-.icon-pause:before {
- content: "\e900";
-}
-
- div {
- font-size: 12pt;
- }
-table {
- font-size: 8pt;
- border-spacing: 0;
- border-collapse: collapse;
- border: none;
- width: 100%;
-}
-th {
- border: 1px solid black;
-}
-td {
- text-align: center;
- border: 1px solid black;
-}
-
-.right{
- text-align: right;
-}
-
-table.tbinline {
- border-collapse: collapse;
-}
-table.tbinline td {
- border: 0.5px solid #969696;
-}
-table.tbinline tr:first-child td {
- border-top: 0;
-}
-table.tbinline tr td:first-child {
- border-left: 0;
-}
-table.tbinline tr:last-child td {
- border-bottom: 0;
-}
-table.tbinline tr td:last-child {
- border-right: 0;
-}
-/*table#tbl_products {
- border-spacing: 0;
- border-collapse: 0;
- margin-top: 10mm;
- width: 100%;
-} */
-
-/*table#tbl_products td {
- padding: 2mm;
- border-bottom: 1px solid black;
-}*/
-
-/*table#tbl_products th {
- margin: 1mm;
- border: 1px solid #fff;
- border-bottom: 0px;
- padding: 2mm;
- background-color: #c6c6c6;
-}*/
-td.datavalues {
- font-size: 8pt;
- /*padding: 3px;*/
-}
-table { page-break-inside:auto }
-tr { page-break-inside:avoid; page-break-after:auto }
-thead { display:table-header-group }
-tfoot { display:table-footer-group }
-.page-break { display: block; page-break-before: always; }
- </style>
-</head>
-<body>
- [% IF id_stafflist %]
- [% stafflist = dksdb.prepare("select distinct(spd.id_staff),st.surname,st.prename,spd.id_reportperiod,to_char(spd.periodstart,'DD.MM.YYYY') as periodstart,to_char(spd.periodend,'DD.MM.YYYY') as spd.periodend from ${schemata}.vw_staffreportperioddays spd left join ${schemata}.staff st on (spd.id_staff=st.id) where spd.id_reportperiod = ? and spd.id_staff in (${id_stafflist}) order by st.surname,st.prename,spd.periodstart asc;") %]
- [% ELSE %]
- [% sqlcmd = "select distinct(spd.id_staff),st.surname,st.prename,spd.id_reportperiod,spd.periodstart,spd.periodend from ${schemata}.vw_staffreportperioddays spd left join ${schemata}.staff st on (spd.id_staff=st.id) where spd.id_reportperiod = ? order by st.surname,st.prename,spd.periodstart asc;" %]
- [% stafflist = dksdb.prepare("select distinct(spd.id_staff),st.surname,st.prename,spd.id_reportperiod,spd.periodstart,spd.periodend from ${schemata}.vw_staffreportperioddays spd left join ${schemata}.staff st on (spd.id_staff=st.id) where spd.id_reportperiod = ? order by st.surname,st.prename,spd.periodstart asc;") %]
- [% END %]
- [% staffmemberperiod = dksdb.prepare("select st.prename,st.surname,spd.* from ${schemata}.vw_staffreportperioddays spd left join ${schemata}.staff st on (spd.id_staff=st.id) where spd.id_reportperiod= ? and spd.id_staff= ? order by spd.daydate asc;") %]
- [% staffperiodsums = dksdb.prepare("select * from ${schemata}.vw_staffreportperiodlist where id_reportperiod=? and id_staff=?;") %]
- [% #sqlcmd %]
- [% FOREACH wl = stafflist.execute(id_reportperiod) %]
- <table>
- <thead>
- <tr ><th colspan="5" style="border-right: 0px;font-size: 10pt;">[% wl.periodstart %] - [% wl.periodend %]</th><th colspan="4" style="border-left: 0px;text-align: right;font-size: 10pt;">[% wl.surname %] [% wl.prename %]</th></tr>
- <tr><th>Semaine</th>
- <th>Lundi</th>
- <th>Mardi</th>
- <th>Mecredi</th>
- <th>Jeudi</th>
- <th>Vendredi</th>
- <th>Samedi</th>
- <th>Dimanche</th>
- <th>Totaux</th></tr>
- </thead>
- <tbody>
- [% wdk = 0 %]
- [% FOREACH pw = staffmemberperiod.execute(id_reportperiod,wl.id_staff) %]
- [% wd = pw.weekdates.split(',') %]
- [% IF wdk == 0 %]
- [% dspwd = pw.dspweekdates.split(',') %]
- <tr><th rowspan="2">[% pw.dspweekshort %]</th>
- <th>[% dspwd.0 %]</th>
- <th>[% dspwd.1 %]</th>
- <th>[% dspwd.2 %]</th>
- <th>[% dspwd.3 %]</th>
- <th>[% dspwd.4 %]</th>
- <th>[% dspwd.5 %]</th>
- <th>[% dspwd.6 %]</th>
- <th></th></tr><tr>
- [% END %]
-
- [% WHILE pw.daydate != wd.$wdk and wdk < 7 %]
- <td> </td>
- [% wdk = wdk + 1 %]
- [% END %]
-
- [% IF wdk < 7 %]
- [% IF pw.timestart1 %]
- <td>
- <table class="tbinline">
- <tr>
- <td class="datavalues">[% pw.timestart1 %]</td>
- <td class="datavalues">[% pw.timeend1 %]</td>
- <td class="datavalues">[% IF pw.workhours %]<span style="font-weight: bold;">[% pw.workhours %]</span>[% ELSE %] [% END %]</td>
- </tr>
- <tr>
- <td class="datavalues"> [% IF pw.timestart2 %][% pw.timestart2 %][% END %]</td>
- <td class="datavalues">[% IF pw.timestart2 %][% pw.timeend2 %][% ELSE %] [% END %]</td>
- <td class="datavalues" >[% IF pw.recuperationhours %]<span style="text-decoration: underline;">[% pw.recuperationhours %]</span>[% ELSE %] [% END %]</td>
- </tr>
- <tr>
- <td> </td>
- <td> </td>
- <td class="datavalues" >[% IF pw.vacancyhours %]<span style="font-style: italic;">[% pw.vacancyhours %][%ELSE%] [% END %]</td>
- </tr>
- <tr>
- <td style="text-align: right;">[% IF pw.timepause %]<span class="icon-pause"></span>[% END %]</td>
- <td class="datavalues">[% IF pw.timepause %][% pw.timepause %][% END %]</td>
- <td> </td>
- </tr>
- </table>
- </td>
- [% ELSE %]
- <td> </td>
- [% END %]
- [% END %]
-
- [% wdk = wdk + 1 %]
- [% IF wdk >= 7 %]
- <td class="datavalues">
- <table class="tbinline">
- <!--<tr><td class="datavalues">[% IF pw.week_workhours && pw.week_workhours != "00:00" %]T: [% pw.week_workhours %][%END %]</td></tr>-->
- <tr><td class="datavalues" >[% IF pw.week_totalhours && pw.week_totalhours != "00:00" %]<span style="font-weight: bold;">[% pw.week_totalhours %]</span>[% ELSE %] [%END %]</td></tr>
- <tr><td class="datavalues" >[% IF pw.week_recuperationhours && pw.week_recuperationhours != "00:00" %]<span style="font-weight: bold;text-decoration: underline;">[% pw.week_recuperationhours %]</span>[% ELSE %] [%END %]</td></tr>
- <tr><td class="datavalues" >[% IF pw.week_vacancyhours && pw.week_vacancyhours != "00:00" %]<span style="font-weight: bold;font-style: italic;">[% pw.week_vacancyhours %]</span>[% ELSE %] [%END %]</td></tr>
- <tr><td class="datavalues" >[% IF pw.week_diffhours && pw.week_diffhours != "00:00" %]<span style="font-weight: bold;text-decoration: underline;text-decoration-style: double;">[% pw.week_diffhours %]</span>[% ELSE %] [%END %]</td></tr>
- </table>
- </td></tr>
- [% wdk = 0 %]
- [% END %]
- [% END %]
- </tbody>
- </table>
- [% sptotal = staffperiodsums.execute(id_reportperiod,wl.id_staff) %]
- [% spt = sptotal.get_all() %]
- <table>
- <thead>
- <tr><th colspan="14">Totaux heures pour la période: [% wl.periodstart %] - [% wl.periodend %]</th></tr>
- <tr>
- <td style="text-align: right;">contractuelles:</td>
- <th style="width: 15mm;">[% spt.0.contracthours %]</th>
- <td style="text-align: right;">travaillées:</td>
- <th style="width: 15mm;">[% spt.0.workhours %]</th>
- <td style="text-align: right;">Congés:</td>
- <th style="width: 15mm;">[% spt.0.vacancyhours %]</th>
- <td style="text-align: right;">Récupérées:</td>
- <th style="width: 15mm;">[% spt.0.recuperationhours %]</th>
- <td style="text-align: right;">Total:</td>
- <th style="width: 15mm;">[% spt.0.totalhours %]</th>
- <td style="text-align: right;">Payées:</td>
- <th style="width: 15mm;">[% spt.0.payedhours %]</th>
- <td style="text-align: right;">à récupérer:</td>
- <th style="width: 15mm;">[% spt.0.hoursdiff %]</th>
- </tr>
- </thead>
- </table>
- <div class="page-break"></div>
- [% END %]
-</body>
-</html>
\ No newline at end of file
+++ /dev/null
-data:application/octet-stream;base64,AAEAAAALAIAAAwAwT1MvMg8SBSoAAAC8AAAAYGNtYXAXVtKHAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5Zq3RsYsAAAF4AAAB0GhlYWQZavrxAAADSAAAADZoaGVhB4IDxgAAA4AAAAAkaG10eAoAAEAAAAOkAAAAFGxvY2EAKAD8AAADuAAAAAxtYXhwAAkAigAAA8QAAAAgbmFtZVKkxIkAAAPkAAABVnBvc3QAAwAAAAAFPAAAACAAAwMAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpAAPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6QD//f//AAAAAAAg6QD//f//AAH/4xcEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAADAED/wAPAA8AACgA3AIcAAAEOAQczMjY1NCYjJSIGBw4BBw4BNz4BNQ4BBxYXHgEXFjMyNz4BNzY3LgEnDgEHDgE3PgE1LgEjEzIWBwYHBhYXFhceARUOAQczMhYVFAYrAQYHDgEHBiMiJy4BJyYnNDc+ATc2Ny4BJyY2Nz4BMzIWBwYHBhYXFhc+ATMyFhcuAScmNjc+ATMDLAoZEEUfLS0f/oMQHw8BGR4HNBEbFGJtCgYYGFI7O0xMOztSGBgFCFtRAxkbCDMRGxQXMRudCQgILgwLDA8PB2mGAgYDBzZMTDZgGyAgSCgoKklBQGciIwsTFEYwMDkJGQcPKDMEFQkJCAksDAwKDg8IESERFywVCRgHDyc0BBQJAWsqTiQuICAu0gEBHDQXBwMOFTAZCy8OCQ4NGQkJCQkZDQ4JDSoMGS8VBwMOFTEaAgMBgwUHIygnVCorKRBDKhUnFE44OE4yKCc4Dw8rK5dnZ3cXFBQiDA0HHz8eQWAoAwUFByInJlIpKigBAQICHj4dQWAoAwUAAAEAAAABAACaNXijXw889QALBAAAAAAA20XbOgAAAADbRds6AAD/wAPAA8AAAAAIAAIAAAAAAAAAAQAAA8D/wAAABAAAAAAAA8AAAQAAAAAAAAAAAAAAAAAAAAUEAAAAAAAAAAAAAAACAAAABAAAQAAAAAAACgAUAB4A6AABAAAABQCIAAMAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEAAwAAAAEAAAAAAAIABwA8AAEAAAAAAAMAAwAqAAEAAAAAAAQAAwBRAAEAAAAAAAUACwAJAAEAAAAAAAYAAwAzAAEAAAAAAAoAGgBaAAMAAQQJAAEABgADAAMAAQQJAAIADgBDAAMAAQQJAAMABgAtAAMAAQQJAAQABgBUAAMAAQQJAAUAFgAUAAMAAQQJAAYABgA2AAMAAQQJAAoANAB0cG90AHAAbwB0VmVyc2lvbiAxLjAAVgBlAHIAcwBpAG8AbgAgADEALgAwcG90AHAAbwB0cG90AHAAbwB0UmVndWxhcgBSAGUAZwB1AGwAYQBycG90AHAAbwB0Rm9udCBnZW5lcmF0ZWQgYnkgSWNvTW9vbi4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
\ No newline at end of file
to_char(pd.pauseend2::interval, 'HH24:MI') AS pauseend2,
COALESCE((to_char(pd.pausestart1::interval, 'HH24:MI') || '-') || to_char(pd.pauseend1::interval, 'HH24:MI'), '') || COALESCE(((CASE WHEN pd.pausestart1 IS NOT NULL THEN '<br/>' ELSE '' END || to_char(pd.pausestart2::interval, 'HH24:MI')) || '-') || to_char(pd.pauseend2::interval, 'HH24:MI'), '') AS dsppausedata,
COALESCE((to_char(pd.timestart1::interval, 'HH24:MI') || '-') || to_char(pd.timeend1::interval, 'HH24:MI'), '') || COALESCE(((CASE WHEN pd.timestart1 IS NOT NULL THEN '<br/>' ELSE '' END || to_char(pd.timestart2::interval, 'HH24:MI')) || '-') || to_char(pd.timeend2::interval, 'HH24:MI'), '') AS dspworkdata,
- CASE WHEN freehours.freehours < '00:00:00'::interval THEN NULL ELSE to_char(freehours.freehours, 'HH24:MI') END AS freehoursafter
+ CASE WHEN freehours.freehours < '00:00:00'::interval THEN NULL ELSE to_char(freehours.freehours, 'HH24:MI') END AS freehoursafter
FROM ".$schema.".staffreportperioddays pd
JOIN ".$schema.".staff st ON pd.id_staff = st.id and st.id='".$id_staff."' and st.isdeleted is null
LEFT JOIN ( SELECT yy.id_staff, yy.ndaydate AS daydate,yy.ndaydate + yy.ntimeend AS tmfrom, yy.daydate + yy.timestart AS tmto,
package POT::Report;
use strict;
+use File::Basename qw/dirname basename/;
+use Data::Dumper;
+use File::Copy::Recursive qw(dircopy);
+use POT::Period;
sub new {
my $class = shift;
my $p = shift;
my $self = bless {}, $class;
$self->{db} = $p->{db};
+ $self->{tmp} =$p->{tmp};
+ $self->{pdf}->{app} = dirname($ENV{SCRIPT_FILENAME})."/tools/bin/wkhtmltopdf";
return $self;
}
+
+sub createpdf(){
+ my $self = shift;
+ my $schema = shift;
+ my $template = shift;
+ my $output = shift;
+ my $inputdata = shift;
+ my $r = -1;
+ my $pdfreports->{pot}= {top=>"20mm",bottom =>"15mm",left=>"5mm",right=>"5mm",size=>"A4",orientation=>"Landscape",encoding=>"ISO-8859-1"};
+ $self->printContent($schema,$self->{tmp}.'/'.$template.$$.".html",$inputdata);
+ $self->printHeader($schema,$self->{tmp}.'/'.$template.$$.".header.html");
+ $self->printFooter($schema,$self->{tmp}.'/'.$template.$$.".footer.html");
+ #dircopy($self->{tmplpath}.'/'.$template,$self->{tmp}.'/'.$template);
+ if ((-e $self->{tmp}.'/'.$template.$$.'.html')){
+ my $cmd = '"'.$self->{pdf}->{app}.'"';
+ if ($pdfreports->{$template}->{bottom}){ $cmd .= " -B ".$pdfreports->{$template}->{bottom}; }
+ if ($pdfreports->{$template}->{left}){ $cmd .= " -L ".$pdfreports->{$template}->{left}; }
+ if ($pdfreports->{$template}->{right}){ $cmd .= " -R ".$pdfreports->{$template}->{right}; }
+ if ($pdfreports->{$template}->{top}){ $cmd .= " -T ".$pdfreports->{$template}->{top}; }
+ if ($pdfreports->{$template}->{orientation}){ $cmd .= " -O ".$pdfreports->{$template}->{orientation}; }
+ if ($pdfreports->{$template}->{size}){ $cmd .= " -s ".$pdfreports->{$template}->{size}; }
+ if ($pdfreports->{$template}->{encoding}){ $cmd .= " --encoding '".$pdfreports->{$template}->{encoding}."'"; }
+ if (-e $self->{tmp}.'/'.$template.$$.'.header.html'){
+ $cmd .= ' --header-html "'.$self->{tmp}.'/'.$template.$$.'.header.html"';
+ }
+ if (-e $self->{tmp}.'/'.$template.$$.'.footer.html'){
+ $cmd .= ' --footer-html "'.$self->{tmp}.'/'.$template.$$.'.footer.html"';
+ }
+ $cmd .= ' "'.$self->{tmp}.'/'.$template.$$.'.html"';
+ $cmd .= ' "'.$output.'"';
+ #print STDERR $cmd."\n";
+ $r = system($cmd);
+ }
+ if (-e $output){
+ unlink($self->{tmp}.'/'.$template.$$.'.html');
+ unlink($self->{tmp}.'/'.$template.$$.'.header.html');
+ unlink($self->{tmp}.'/'.$template.$$.'.footer.html');
+ return ($r,$output);
+ }
+ return ($r,undef);
+}
+
sub printHeader(){
my $self = shift;
my $schema = shift;
my $outfile = shift;
+ my $cmp= $self->{db}->query_unenc("select * from public.companies where schemata='".$schema."';");
open(HD,">".$outfile);
print HD "<!DOCTYPE html>
<html><head>
</td>
<td style=\"width: 60mm;text-align: right;\">
<div style=\"text-align: left;width: 60mm; font-size: 8pt;font: sans;\">
- <b>[% cmp.0.company %] [% cmp.0.socialtype %]</b><br/>
- [% cmp.0.address %]<br/>
- [% cmp.0.zip %] [% cmp.0.city%]<br/><br/>
+ <b>".$cmp->{company}." ".$cmp->{socialtype}."</b><br/>
+ ".$cmp->{address}."<br/>
+ ".$cmp->{zip}." ".$cmp->{city}."<br/><br/>
</div>
</td>
<tr><td style=\"text-align: left;\"></td><td></td></tr>
<title>POT - Staffmember - Period</title>
<style>
\@font-face {
- font-family: 'pot';
- src: url(\"data:font/ttf;base64,AAEAAAALAIAAAwAwT1MvMg8SBSoAAAC8AAAAYGNtYXAXVtKHAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5Zq3RsYsAAAF4AAAB0GhlYWQZavrxAAADSAAAADZoaGVhB4IDxgAAA4AAAAAkaG10eAoAAEAAAAOkAAAAFGxvY2EAKAD8AAADuAAAAAxtYXhwAAkAigAAA8QAAAAgbmFtZVKkxIkAAAPkAAABVnBvc3QAAwAAAAAFPAAAACAAAwMAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpAAPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6QD//f//AAAAAAAg6QD//f//AAH/4xcEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAADAED/wAPAA8AACgA3AIcAAAEOAQczMjY1NCYjJSIGBw4BBw4BNz4BNQ4BBxYXHgEXFjMyNz4BNzY3LgEnDgEHDgE3PgE1LgEjEzIWBwYHBhYXFhceARUOAQczMhYVFAYrAQYHDgEHBiMiJy4BJyYnNDc+ATc2Ny4BJyY2Nz4BMzIWBwYHBhYXFhc+ATMyFhcuAScmNjc+ATMDLAoZEEUfLS0f/oMQHw8BGR4HNBEbFGJtCgYYGFI7O0xMOztSGBgFCFtRAxkbCDMRGxQXMRudCQgILgwLDA8PB2mGAgYDBzZMTDZgGyAgSCgoKklBQGciIwsTFEYwMDkJGQcPKDMEFQkJCAksDAwKDg8IESERFywVCRgHDyc0BBQJAWsqTiQuICAu0gEBHDQXBwMOFTAZCy8OCQ4NGQkJCQkZDQ4JDSoMGS8VBwMOFTEaAgMBgwUHIygnVCorKRBDKhUnFE44OE4yKCc4Dw8rK5dnZ3cXFBQiDA0HHz8eQWAoAwUFByInJlIpKigBAQICHj4dQWAoAwUAAAEAAAABAACaNXijXw889QALBAAAAAAA20XbOgAAAADbRds6AAD/wAPAA8AAAAAIAAIAAAAAAAAAAQAAA8D/wAAABAAAAAAAA8AAAQAAAAAAAAAAAAAAAAAAAAUEAAAAAAAAAAAAAAACAAAABAAAQAAAAAAACgAUAB4A6AABAAAABQCIAAMAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEAAwAAAAEAAAAAAAIABwA8AAEAAAAAAAMAAwAqAAEAAAAAAAQAAwBRAAEAAAAAAAUACwAJAAEAAAAAAAYAAwAzAAEAAAAAAAoAGgBaAAMAAQQJAAEABgADAAMAAQQJAAIADgBDAAMAAQQJAAMABgAtAAMAAQQJAAQABgBUAAMAAQQJAAUAFgAUAAMAAQQJAAYABgA2AAMAAQQJAAoANAB0cG90AHAAbwB0VmVyc2lvbiAxLjAAVgBlAHIAcwBpAG8AbgAgADEALgAwcG90AHAAbwB0cG90AHAAbwB0UmVndWxhcgBSAGUAZwB1AGwAYQBycG90AHAAbwB0Rm9udCBnZW5lcmF0ZWQgYnkgSWNvTW9vbi4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==\") format('truetype');
-
- font-weight: normal;
- font-style: normal;
- font-display: block;
-}
-
-[class^=\"icon-\"], [class*=\" icon-\"] {
- font-family: 'pot' !important;
- speak: never;
- font-style: normal;
- font-weight: normal;
- font-variant: normal;
- text-transform: none;
- line-height: 1;
-
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-
-.icon-pause:before {
- content: \"\e900\";
-}
-
- div {
- font-size: 12pt;
- }
-table {
- font-size: 8pt;
- border-spacing: 0;
- border-collapse: collapse;
- border: none;
- width: 100%;
-}
-th {
- border: 1px solid black;
-}
-td {
- text-align: center;
- border: 1px solid black;
-}
-
-.right{
- text-align: right;
-}
-
-table.tbinline {
- border-collapse: collapse;
-}
-table.tbinline td {
- border: 0.5px solid #969696;
-}
-table.tbinline tr:first-child td {
- border-top: 0;
-}
-table.tbinline tr td:first-child {
- border-left: 0;
-}
-table.tbinline tr:last-child td {
- border-bottom: 0;
-}
-table.tbinline tr td:last-child {
- border-right: 0;
+ font-family: 'pot'; src: url(\"data:font/ttf;base64,AAEAAAALAIAAAwAwT1MvMg8SBSoAAAC8AAAAYGNtYXAXVtKHAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5Zq3RsYsAAAF4AAAB0GhlYWQZavrxAAADSAAAADZoaGVhB4IDxgAAA4AAAAAkaG10eAoAAEAAAAOkAAAAFGxvY2EAKAD8AAADuAAAAAxtYXhwAAkAigAAA8QAAAAgbmFtZVKkxIkAAAPkAAABVnBvc3QAAwAAAAAFPAAAACAAAwMAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpAAPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6QD//f//AAAAAAAg6QD//f//AAH/4xcEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAADAED/wAPAA8AACgA3AIcAAAEOAQczMjY1NCYjJSIGBw4BBw4BNz4BNQ4BBxYXHgEXFjMyNz4BNzY3LgEnDgEHDgE3PgE1LgEjEzIWBwYHBhYXFhceARUOAQczMhYVFAYrAQYHDgEHBiMiJy4BJyYnNDc+ATc2Ny4BJyY2Nz4BMzIWBwYHBhYXFhc+ATMyFhcuAScmNjc+ATMDLAoZEEUfLS0f/oMQHw8BGR4HNBEbFGJtCgYYGFI7O0xMOztSGBgFCFtRAxkbCDMRGxQXMRudCQgILgwLDA8PB2mGAgYDBzZMTDZgGyAgSCgoKklBQGciIwsTFEYwMDkJGQcPKDMEFQkJCAksDAwKDg8IESERFywVCRgHDyc0BBQJAWsqTiQuICAu0gEBHDQXBwMOFTAZCy8OCQ4NGQkJCQkZDQ4JDSoMGS8VBwMOFTEaAgMBgwUHIygnVCorKRBDKhUnFE44OE4yKCc4Dw8rK5dnZ3cXFBQiDA0HHz8eQWAoAwUFByInJlIpKigBAQICHj4dQWAoAwUAAAEAAAABAACaNXijXw889QALBAAAAAAA20XbOgAAAADbRds6AAD/wAPAA8AAAAAIAAIAAAAAAAAAAQAAA8D/wAAABAAAAAAAA8AAAQAAAAAAAAAAAAAAAAAAAAUEAAAAAAAAAAAAAAACAAAABAAAQAAAAAAACgAUAB4A6AABAAAABQCIAAMAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEAAwAAAAEAAAAAAAIABwA8AAEAAAAAAAMAAwAqAAEAAAAAAAQAAwBRAAEAAAAAAAUACwAJAAEAAAAAAAYAAwAzAAEAAAAAAAoAGgBaAAMAAQQJAAEABgADAAMAAQQJAAIADgBDAAMAAQQJAAMABgAtAAMAAQQJAAQABgBUAAMAAQQJAAUAFgAUAAMAAQQJAAYABgA2AAMAAQQJAAoANAB0cG90AHAAbwB0VmVyc2lvbiAxLjAAVgBlAHIAcwBpAG8AbgAgADEALgAwcG90AHAAbwB0cG90AHAAbwB0UmVndWxhcgBSAGUAZwB1AGwAYQBycG90AHAAbwB0Rm9udCBnZW5lcmF0ZWQgYnkgSWNvTW9vbi4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==\") format('truetype');
+ font-weight: normal; font-style: normal; font-display: block;
}
+[class^=\"icon-\"], [class*=\" icon-\"] { font-family: 'pot' !important; speak: never; font-style: normal; font-weight: normal; font-variant: normal; text-transform: none; line-height: 1; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }
+.icon-pause:before { content: \"\e900\"; }
+div { font-size: 12pt; }
+table { font-size: 8pt; border-spacing: 0; border-collapse: collapse; border: none; width: 100%; }
+th { border: 1px solid black; }
+td { text-align: center; vertical-align: top; border: 1px solid black; }
+.right{ text-align: right; }
+table.tbinline { border-collapse: collapse; }
+table.tbinline td { border: 0.5px solid #969696; }
+table.tbinline tr:first-child td { border-top: 0; }
+table.tbinline tr td:first-child { border-left: 0; }
+table.tbinline tr:last-child td { border-bottom: 0; }
+table.tbinline tr td:last-child { border-right: 0; }
+td.datavalues div { font-size: 8pt; }
-td.datavalues {
- font-size: 8pt;
-}
table { page-break-inside:auto }
tr { page-break-inside:avoid; page-break-after:auto }
thead { display:table-header-group }
</style>
</head>
<body>";
- if ($id_stafflist){
- $stafflist = $self->{db}->querysorted("select distinct(spd.id_staff),st.surname,st.prename,spd.id_reportperiod,to_char(spd.periodstart,'DD.MM.YYYY') as periodstart,to_char(spd.periodend,'DD.MM.YYYY') as spd.periodend from ".$schema.".vw_staffreportperioddays spd left join ".$schema.".staff st on (spd.id_staff=st.id) where spd.id_reportperiod = ? and spd.id_staff in ($id_stafflist) order by st.surname,st.prename,spd.periodstart asc;");
- } else {
- my $sqlcmd = "select distinct(spd.id_staff),st.surname,st.prename,spd.id_reportperiod,spd.periodstart,spd.periodend from ".$schema.".vw_staffreportperioddays spd left join ".$schema.".staff st on (spd.id_staff=st.id) where spd.id_reportperiod = ? order by st.surname,st.prename,spd.periodstart asc;";
- $stafflist = $self->{db}->querysorted("select distinct(spd.id_staff),st.surname,st.prename,spd.id_reportperiod,spd.periodstart,spd.periodend from ".$schema.".vw_staffreportperioddays spd left join ".$schema.".staff st on (spd.id_staff=st.id) where spd.id_reportperiod = ? order by st.surname,st.prename,spd.periodstart asc");
+ #print CT Dumper($data);
+if (exists($data->{staff_exclude})){
+ my $stexcl = "";
+ if (scalar(@{$data->{staff_exclude}}) > 0){
+ $stexcl = " and srp.id_staff not in ('".join("','",@{$data->{staff_exclude}})."')";
+ }
+ my $sql = "select rp.id,rp.startdate,rp.enddate,st.prename,st.surname,to_char(rp.startdate,'DD.MM.YYYY') as dspstartdate,to_char(rp.enddate,'DD.MM.YYYY') as dspenddate, srp.id_staff,
+ to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours,
+ to_char(srp.workhours, 'HH24:MI'::text) AS workhours,
+ to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours,
+ to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+ to_char(srp.hoursdiff, 'HH24:MI'::text) as hoursdiff,
+ to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+ to_char(srp.payedhours, 'HH24:MI'::text) AS payedhours,
+ to_char(srp.transferedhourscalc, 'HH24:MI'::text) AS transferedhourscalc,
+ '+' || suppvacancysunwork as suppvacancysunwork,
+ '+' || suppvacancy44hours as suppvacancy44hours
+ from portanova.staffreportperiod srp
+join portanova.reportperiod rp on (srp.id_reportperiod =rp.id)
+join portanova.staff st on (srp.id_staff=st.id)
+where st.isdeleted is null and srp.id_reportperiod ='".$self->{db}->securetext($data->{id_reportperiod})."' ".$stexcl."
+order by rp.startdate,rp.enddate,st.surname,st.prename;";
+
+ my $rpdata = $self->{db}->querysorted($sql);
+ my $rpmax = keys(%{$rpdata})-1;
+ foreach my $rd (sort {$a <=> $b} keys(%{$rpdata})){
+ print CT $self->ReportPage($schema,$rpdata->{$rd});
+ if ($rd != $rpmax){
+ print CT "<div class=\"page-break\"></div>";
+ }
+
+ }
+ print CT "</body></html>";
+} elsif (exists($data->{id_staff})){
+ my $rpincl = "";
+ if ($data->{id_periods} ne ""){
+ $rpincl = " and srp.id_reportperiod in ('".join("','",@{$data->{id_periods}})."')";
+ }
+ my $sql = "select rp.id,rp.startdate,rp.enddate,st.prename,st.surname,to_char(rp.startdate,'DD.MM.YYYY') as dspstartdate,to_char(rp.enddate,'DD.MM.YYYY') as dspenddate, srp.id_staff,
+ to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours,
+ to_char(srp.workhours, 'HH24:MI'::text) AS workhours,
+ to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours,
+ to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+ to_char(srp.hoursdiff, 'HH24:MI'::text) as hoursdiff,
+ to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+ to_char(srp.payedhours, 'HH24:MI'::text) AS payedhours,
+ to_char(srp.transferedhourscalc, 'HH24:MI'::text) AS transferedhourscalc,
+ '+' || suppvacancysunwork as suppvacancysunwork,
+ '+' || suppvacancy44hours as suppvacancy44hours
+ from portanova.staffreportperiod srp
+join portanova.reportperiod rp on (srp.id_reportperiod =rp.id)
+join portanova.staff st on (srp.id_staff=st.id)
+where st.isdeleted is null and id_staff='".$data->{id_staff}."' and srp.id_reportperiod ='".$self->{db}->securetext($data->{id_reportperiod})."' ".$rpincl."
+order by rp.startdate,rp.enddate,st.surname,st.prename;";
+ my $rpdata = $self->{db}->querysorted($sql);
+ my $rpmax = keys(%{$rpdata})-1;
+ foreach my $rd (sort {$a <=> $b} keys(%{$rpdata})){
+ print CT $self->ReportPage($schema,$rpdata->{$rd});
+ if ($rd != $rpmax){
+ print CT "<div class=\"page-break\"></div>";
+ }
}
- my $staffmemberperiodsql = "select st.prename,st.surname,spd.* from ".$schema.".vw_staffreportperioddays spd left join ".$schema.".staff st on (spd.id_staff=st.id) where spd.id_reportperiod= ? and spd.id_staff= ? order by spd.daydate asc;";
- my $staffperiodsumssql = $self->{db}->querysorted("select * from ".$schema.".vw_staffreportperiodlist where id_reportperiod=? and id_staff=?;");
- foreach my $wl (keys(%{$stafflist})){
- $staffmemberperiodsql =~ s///g;
- $staffperiodsumssql =~ s///g;
- $data->{period} = $self->{db}->querysorted($staffmemberperiodsql);
- $data->{sums} = $self->{db}->query($staffperiodsumssql);
- print CT $self->ReportPage($data);
- print CT "<div class=\"page-break\"></div>";
- }
- pritn CT "</body></html>";
+}
+ print CT "</body></html>";
close(CT);
return 1;
}
sub ReportPage(){
my $self = shift;
+ my $schema = shift;
my $data = shift;
my $txtpage = "<table>
<thead>
- <tr ><th colspan=\"5\" style=\"border-right: 0px;font-size: 10pt;\">[% wl.periodstart %] - [% wl.periodend %]</th><th colspan=\"4\" style=\"border-left: 0px;text-align: right;font-size: 10pt;\">[% wl.surname %] [% wl.prename %]</th></tr>
+ <tr ><th colspan=\"5\" style=\"border-right: 0px;font-size: 10pt;\">".$data->{dspstartdate}." - ".$data->{dspenddate}."</th><th colspan=\"4\" style=\"border-left: 0px;text-align: right;font-size: 10pt;\">".$data->{surname}." ".$data->{prename}."</th></tr>
<tr><th>Semaine</th>
<th>Lundi</th>
<th>Mardi</th>
<th>Totaux</th></tr>
</thead>
<tbody>";
+ my $perioddata = $self->getPeriodDays($schema,$data->{id_staff},$data->{startdate},$data->{enddate});
+ my $weeksums = $self->getPeriodWeekSums($schema,$data->{id_staff},$data->{startdate},$data->{enddate});
my $wdk = 0;
- foreach my $pw (keys(%{$data->{period}})){ #<== sort {$a <=> $b}
- my @wd = split(',',$data->{period}->{$pw}->{weekdates});
+ foreach my $pw (sort {$a <=> $b} keys(%{$perioddata})){
+ my @wd = split(',',$perioddata->{$pw}->{weekdates});
if ($wdk == 0 ){
- my $dspwd = split(',',$data->{period}->{$pw}->{dspweekdates});
- $txtpage .="<tr><th rowspan=\"2\">[% pw.dspweekshort %]</th>
- <th>[% dspwd.0 %]</th>
- <th>[% dspwd.1 %]</th>
- <th>[% dspwd.2 %]</th>
- <th>[% dspwd.3 %]</th>
- <th>[% dspwd.4 %]</th>
- <th>[% dspwd.5 %]</th>
- <th>[% dspwd.6 %]</th>
+ my @dspwd = split(',',$perioddata->{$pw}->{dspweekdates});
+ $txtpage .="<tr><th rowspan=\"2\">".$perioddata->{$pw}->{dspweekshort}."</th>
+ <th>".$dspwd[0]."</th>
+ <th>".$dspwd[1]."</th>
+ <th>".$dspwd[2]."</th>
+ <th>".$dspwd[3]."</th>
+ <th>".$dspwd[4]."</th>
+ <th>".$dspwd[5]."</th>
+ <th>".$dspwd[6]."</th>
<th></th></tr><tr>
";
}
- while (($data->{period}->{$pw}->{daydate} ne $wd[$wdk]) && $wdk lt "7"){
- $txtpage .="<td> </td>";
+ while (($perioddata->{$pw}->{daydate} ne $wd[$wdk]) && $wdk lt "7"){
+ $txtpage .="<td>jour de repos</td>";
$wdk++;
}
if ($wdk lt "7"){
- if ($data->{period}->{$pw}->{timestart1} ne "" || $data->{period}->{$pw}->{timestart2} ne ""){
+ if ($perioddata->{$pw}->{dayhours} ne "00:00" || $perioddata->{$pw}->{vacancyhours} ne "00:00" || $perioddata->{$pw}->{recuperationhours} ne "00:00"){
$txtpage .="<td>
<table class=\"tbinline\">
<tr>
- <td class=\"datavalues\">[% pw.timestart1 %]</td>
- <td class=\"datavalues\">[% pw.timeend1 %]</td>
- <td class=\"datavalues\">[% IF pw.workhours %]<span style=\"font-weight: bold;\">[% pw.workhours %]</span>[% ELSE %] [% END %]</td>
- </tr>
- <tr>
- <td class=\"datavalues\"> [% IF pw.timestart2 %][% pw.timestart2 %][% END %]</td>
- <td class=\"datavalues\">[% IF pw.timestart2 %][% pw.timeend2 %][% ELSE %] [% END %]</td>
- <td class=\"datavalues\" >[% IF pw.recuperationhours %]<span style=\"text-decoration: underline;\">[% pw.recuperationhours %]</span>[% ELSE %] [% END %]</td>
- </tr>
- <tr>
- <td> </td>
- <td> </td>
- <td class=\"datavalues\" >[% IF pw.vacancyhours %]<span style=\"font-style: italic;\">[% pw.vacancyhours %][%ELSE%] [% END %]</td>
- </tr>
- <tr>
- <td style=\"text-align: right;\">[% IF pw.timepause %]<span class=\"icon-pause\"></span>[% END %]</td>
- <td class=\"datavalues\">[% IF pw.timepause %][% pw.timepause %][% END %]</td>
- <td> </td>
+ <td class=\"datavalues\"><div>".$perioddata->{$pw}->{dspworkdata}."</div><div>".$perioddata->{$pw}->{dspworkdata}."</div></td>
+ <td class=\"datavalues\" style=\"width: 15mm;\">
+ <div style=\"font-weight: bold;\">".$perioddata->{$pw}->{dayhours}."</div>
+ <div style=\"font-style: italic;\">".$perioddata->{$pw}->{vacancyhours}."</div>
+ <div style=\"text-decoration: underline;\">".$perioddata->{$pw}->{recuperationhours}."</div>
+ </td>
</tr>
</table>
</td>"
} else {
- $txtpage .= "<td> </td>"
+ $txtpage .= "<td>jour de repos</td>"
}
}
$wdk++;
if ($wdk gt "7"){
$txtpage .= "<td class=\"datavalues\">
- <table class=\"tbinline\">
- <!--<tr><td class=\"datavalues\">[% IF pw.week_workhours && pw.week_workhours != \"00:00\" %]T: [% pw.week_workhours %][%END %]</td></tr>-->
- <tr><td class=\"datavalues\" >[% IF pw.week_totalhours && pw.week_totalhours != \"00:00\" %]<span style=\"font-weight: bold;\">[% pw.week_totalhours %]</span>[% ELSE %] [%END %]</td></tr>
- <tr><td class=\"datavalues\" >[% IF pw.week_recuperationhours && pw.week_recuperationhours != \"00:00\" %]<span style=\"font-weight: bold;text-decoration: underline;\">[% pw.week_recuperationhours %]</span>[% ELSE %] [%END %]</td></tr>
- <tr><td class=\"datavalues\" >[% IF pw.week_vacancyhours && pw.week_vacancyhours != \"00:00\" %]<span style=\"font-weight: bold;font-style: italic;\">[% pw.week_vacancyhours %]</span>[% ELSE %] [%END %]</td></tr>
- <tr><td class=\"datavalues\" >[% IF pw.week_diffhours && pw.week_diffhours != \"00:00\" %]<span style=\"font-weight: bold;text-decoration: underline;text-decoration-style: double;\">[% pw.week_diffhours %]</span>[% ELSE %] [%END %]</td></tr>
- </table>
+ <table class=\"tbinline\"><tr><td class=\"datavalues\">";
+ my $ws = $perioddata->{$pw}->{weekstart};
+ if (exists($weeksums->{$ws})){
+ $txtpage .= "<div style=\"font-weight: bold;\">".(($weeksums->{$ws}->{totalhours} eq "00:00")?"":$weeksums->{$ws}->{totalhours})."</div>
+ <div style=\"font-weight: bold;text-decoration: underline;\">".(($weeksums->{$ws}->{recperationhours} eq "00:00")?"":$weeksums->{$ws}->{recperationhours})."</div>
+ <div style=\"font-weight: bold;font-style: italic;\">".(($weeksums->{$ws}->{vacancyhours} eq "00:00")?"":$weeksums->{$ws}->{vacancyhours})."</div>
+ <div style=\"font-weight: bold;text-decoration: underline;text-decoration-style: double;\">".(($weeksums->{$ws}->{diffhours} eq "00:00")?"":$weeksums->{$ws}->{diffhours})."</div>";
+ }
+ $txtpage .= "</td></tr></table>
</td></tr>
";
$wdk=0;
}
}
$txtpage .= "</tbody> </table>";
- my $spt = $data->{sums};
+ # my $spt = $data->{sums};
$txtpage .= "<table>
<thead>
- <tr><th colspan=\"14\">Totaux heures pour la période: [% wl.periodstart %] - [% wl.periodend %]</th></tr>
+ <tr><th colspan=\"20\">Totaux heures pour la période: ".$data->{dspstartdate}." - ".$data->{dspenddate}."</th></tr>
<tr>
- <td style=\"text-align: right;\">contractuelles:</td>
- <th style=\"width: 15mm;\">[% spt.0.contracthours %]</th>
- <td style=\"text-align: right;\">travaillées:</td>
- <th style=\"width: 15mm;\">[% spt.0.workhours %]</th>
- <td style=\"text-align: right;\">Congés:</td>
- <th style=\"width: 15mm;\">[% spt.0.vacancyhours %]</th>
- <td style=\"text-align: right;\">Récupérées:</td>
- <th style=\"width: 15mm;\">[% spt.0.recuperationhours %]</th>
- <td style=\"text-align: right;\">Total:</td>
- <th style=\"width: 15mm;\">[% spt.0.totalhours %]</th>
- <td style=\"text-align: right;\">Payées:</td>
- <th style=\"width: 15mm;\">[% spt.0.payedhours %]</th>
- <td style=\"text-align: right;\">à récupérer:</td>
- <th style=\"width: 15mm;\">[% spt.0.hoursdiff %]</th>
+ <td style=\"text-align: right;\">contrat:</td>
+ <th style=\"width: 15mm;\">".$data->{contracthours}."</th>
+ <td style=\"text-align: right;\">travail:</td>
+ <th style=\"width: 15mm;\">".$data->{workhours}."</th>
+ <td style=\"text-align: right;\">congés:</td>
+ <th style=\"width: 15mm;\">".$data->{vacancyhours}."</th>
+ <td style=\"text-align: right;\">récupérées:</td>
+ <th style=\"width: 15mm;\">".$data->{recuperationhours}."</th>
+ <td style=\"text-align: right;\">total:</td>
+ <th style=\"width: 15mm;\">".$data->{totalhours}."</th>
+ <td style=\"text-align: right;\">décompte<br/>reporté:</td>
+ <th style=\"width: 15mm;\">".$data->{transferedhourscalc}."</th>
+ <td style=\"text-align: right;\">heures<br/>payées:</td>
+ <th style=\"width: 15mm;\">".$data->{payedhours}."</th>
+ <td style=\"text-align: right;\">décompte<br/>fin POT:</td>
+ <th style=\"width: 15mm;\">".$data->{hoursdiff}."</th>
+ <td style=\"text-align: right;\">congé suppl<br/>+44h:</td>
+ <th style=\"width: 15mm;\">".$data->{suppvacancy44hours}."</th>
+ <td style=\"text-align: right;\">congé suppl.<br/>dimache travaillé:</td>
+ <th style=\"width: 15mm;\">".$data->{suppvacancysunwork}."</th>
</tr>
</thead>
</table>";
return $txtpage;
-}
\ No newline at end of file
+}
+
+sub getPeriodDays(){
+ my $self = shift;
+ my $schema = shift;
+ my $id_staff = shift;
+ my $date_start = shift;
+ my $date_end = shift;
+
+ my $sql = "SELECT pd.id,pd.daydate,pd.id_vacancytype,pd.id_recuperationtype,
+ date(date_trunc('week',pd.daydate)) as weekstart,
+ date_part('isoyear',pd.daydate) || '-' || lpad(date_part('week',pd.daydate)::text, 2, '0') AS dspweekshort,
+ to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacancyhours END::interval, 'HH24:MI') AS vacancyhours,
+ to_char(CASE WHEN pd.dayhours::interval = '00:00:00'::interval THEN NULL ELSE pd.dayhours END::interval, 'HH24:MI') AS dayhours,
+ to_char(case WHEN pd.recuperationhours::interval = '00:00:00'::interval THEN NULL ELSE pd.recuperationhours END::interval, 'HH24:MI') AS recuperationhours,
+ COALESCE((to_char(pd.pausestart1::interval, 'HH24:MI') || '-') || to_char(pd.pauseend1::interval, 'HH24:MI'), '') || COALESCE(((CASE WHEN pd.pausestart1 IS NOT NULL THEN '<br/>' ELSE '' END || to_char(pd.pausestart2::interval, 'HH24:MI')) || '-') || to_char(pd.pauseend2::interval, 'HH24:MI'), '') AS dsppausedata,
+ COALESCE((to_char(pd.timestart1::interval, 'HH24:MI') || '-') || to_char(pd.timeend1::interval, 'HH24:MI'), '') || COALESCE(((CASE WHEN pd.timestart1 IS NOT NULL THEN '<br/>' ELSE '' END || to_char(pd.timestart2::interval, 'HH24:MI')) || '-') || to_char(pd.timeend2::interval, 'HH24:MI'), '') AS dspworkdata,
+ (((((((((((to_char(date_trunc('week',pd.daydate), 'DD.MM.YYYY') || ',') || to_char(date(date_trunc('week',pd.daydate) + '1 day'::interval), 'DD.MM.YYYY')) || ',') || to_char(date(date_trunc('week',pd.daydate) + '2 days'::interval), 'DD.MM.YYYY')) || ',') || to_char(date(date_trunc('week',pd.daydate)) + '3 days'::interval, 'DD.MM.YYYY')) || ',') || to_char(date(date_trunc('week',pd.daydate) + '4 days'::interval), 'DD.MM.YYYY')) || ',') || to_char(date(date_trunc('week',pd.daydate) + '5 days'::interval), 'DD.MM.YYYY')) || ',') || to_char(date(date_trunc('week',pd.daydate) + '6 days'::interval), 'DD.MM.YYYY') AS dspweekdates,
+ (((((((((((date_trunc('week',pd.daydate) || ',') || date(date_trunc('week',pd.daydate) + '1 day'::interval)) || ',') || date(date_trunc('week',pd.daydate) + '2 days'::interval)) || ',') || date(date_trunc('week',pd.daydate) + '3 days'::interval)) || ',') || date(date_trunc('week',pd.daydate) + '4 days'::interval)) || ',') || date(date_trunc('week',pd.daydate) + '5 days'::interval)) || ',') || date(date_trunc('week',pd.daydate) + '6 days'::interval) AS weekdates
+ FROM ".$schema.".staffreportperioddays pd
+ JOIN ".$schema.".staff st ON pd.id_staff = st.id and st.id='".$id_staff."' and st.isdeleted is null
+ WHERE pd.daydate between date('".$date_start."') and date('".$date_end."')
+ ORDER BY pd.id_staff, pd.daydate;";
+ #print STDERR $sql."\n";
+ my $ret = $self->{db}->querysorted($sql);
+ return $ret;
+}
+
+sub getPeriodWeekSums(){
+ my $self = shift;
+ my $schema = shift;
+ my $id_staff = shift;
+ my $date_start = shift;
+ my $date_end = shift;
+ my $sql = "select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
+ ,to_char(ws.vacancyhours,'HH24:MI') as vacancyhours
+ ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
+ ,to_char(ws.totalhours,'HH24:MI') as totalhours
+ ,case when cd.contractworkdays < cd.cmpcontractdays then to_char(cd.contractworkdays*'08:00:00'::interval,'HH24:MI') else to_char(cd.contracthours,'HH24:MI') end as contracthours
+ ,to_char(AVG(ws.totalhours) over (order by ws.weekstart),'HH24:MI') as avgtotalhours
+ ,case when cd.contractworkdays < cd.cmpcontractdays then '00:00' else
+ case when position('-' in to_char(ws.totalhours-cd.contracthours ,'HH24:MI')) > 0 then '-' || replace(to_char(ws.totalhours-cd.contracthours ,'HH24:MI'),'-','') else to_char(ws.totalhours-cd.contracthours ,'HH24:MI') end
+ end as diffhours
+ ,cd.contractworkdays
+ ,cd.cmpcontractdays
+ ,cd.cmpweekhours
+ ,to_char(ws.workhours::interval,'HH24:MI') as workhours
+ ,case when cd.contractworkdays < cd.cmpcontractdays then
+ to_char(case when cd.cmpweekhours < '40:00:00'::interval then cd.contracthours * 1.15 * cd.contractworkdays else (cd.contractworkdays*'08:00:00'::interval) + (cd.contractworkdays* case when maxdata.maxweekhours > '48:00:00' then '01:16:50'::interval else '00:50:00'::interval end) end,'HH24:MI')
+ else
+ to_char(case when cd.contracthours < '40:00:00'::interval then cd.contracthours * 1.15 else maxdata.maxweekhours end,'HH24:MI')
+ end as maxweekhours
+ ,case when cd.contractworkdays < cd.cmpcontractdays then to_char(cd.contractworkdays*'08:00:00'::interval,'HH24:MI') else
+ to_char(case when cd.contracthours < '40:00:00'::interval then cd.contracthours else maxdata.defaultweekhours end,'HH24:MI')
+ end as defaultweekhours
+ from (
+ SELECT weekstart,weekend,calweek,calyear, id_staff,
+ sum(CASE WHEN srpd.workhours IS NULL THEN '00:00:00'::interval ELSE srpd.workhours::interval END) AS workhours,
+ sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
+ sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
+ sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours,
+ sum(CASE WHEN srpd.workhours > '00:00:00'::time without time zone OR srpd.recuperationhours > '00:00:00'::time without time zone OR srpd.vacancyhours > '00:00:00'::time without time zone THEN 1 ELSE 0 END) AS workdays,
+ sum( CASE WHEN srpd.contracthours IS NULL THEN '00:00:00'::interval ELSE srpd.contracthours::interval END) AS contracthours
+ FROM (select *,date(date_trunc('week', daydate)) AS weekstart,
+ date(date_trunc('week', daydate) + interval '6 days') AS weekend,
+ date_part('week', daydate) AS calweek,
+ date_part('isoyear', daydate) AS calyear from ".$schema.".staffreportperioddays
+ where id_staff= '".$id_staff."' and daydate between date('".$date_start."') and date('".$date_end."')
+ ) srpd GROUP BY srpd.weekstart,srpd.weekend,srpd.calweek,srpd.calyear,srpd.id_staff
+ ORDER BY weekstart) ws left join (
+ select date(date_trunc('week',pd.daydate)) as weekstart,pd.id_staff,max(sc.weekdays) as cmpcontractdays,max(sc.weekhours) as cmpweekhours,
+ case when count(pd.daydate) < avg(sc.weekdays) then count(pd.daydate) else avg(sc.weekdays) end as contractworkdays,
+ case when count(pd.daydate) < avg(sc.weekdays) then avg(sc.weekhours/ sc.weekdays) * count(pd.daydate) else avg(sc.weekhours/ sc.weekdays) * avg(sc.weekdays) end as contracthours ,sum(case when coalesce(pd.workhours,'00:00:00'::time) > '00:00:00'::time then 1 else 0 end) as realworkdays
+ from ( select id_staff,weekdays ,weekhours,
+ case when startdate> date('".$date_start."') then startdate else date('".$date_start."') end as staffperiodstart,
+ case when enddate is null or enddate > date('".$date_end."') then date('".$date_end."')
+ else enddate end as staffperiodend from ".$schema.".staffcontract where id_staff='".$id_staff."'
+ and startdate < date('".$date_end."')
+ ) sc
+ join ".$schema.".staffreportperioddays pd on (pd.id_staff=sc.id_staff and pd.daydate between sc.staffperiodstart and sc.staffperiodend)
+ group by date(date_trunc('week',pd.daydate)),pd.id_staff
+ ) cd on ws.id_staff = cd.id_staff and ws.weekstart=cd.weekstart
+ left join (
+ select id_staff,weekstart,max(defaultweekhours) as defaultweekhours,max(maxweekhours) as maxweekhours from (
+ select lpd.id_staff,date(date_trunc('week',lpd.daydate)) as weekstart,lpd.daydate,
+ case when wk.defaultweekhours is null then wkdef.defaultweekhours else wk.defaultweekhours end as defaultweekhours ,
+ case when wk.maxweekhours is null then wkdef.maxweekhours else wk.maxweekhours end as maxweekhours
+ from ".$schema.".staffreportperioddays lpd
+ left join ".$schema.".worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
+ cross join (select * from ".$schema.".worktimes where isdefault=true) wkdef
+ where id_staff='".$id_staff."' and lpd.daydate between date('".$date_start."') and date('".$date_end."')
+ order by lpd.daydate ) mh group by id_staff,weekstart
+ ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart";
+ #print STDERR "\n======WEEK SUMS=$date_start-$date_end======\n".$sql."\n=====\n";
+ my $ret = $self->{db}->querybykey('weekstart',$sql);
+
+ return $ret;
+}
+
+1;
\ No newline at end of file
return "'".$text."'";
}
+sub query_unenc(){
+ my $self = shift;
+ my $stat = shift;
+ # my $vw_info = shift;
+ my $retdata = undef;
+ #my $self->{dbh} = DBI->connect($sitecfg->{dsn},$sitecfg->{dbuser},$sitecfg->{dbpassword},{PrintError=>1,RaiseError=>1,AutoCommit=>1}) or return $retdata->{error} = "query Connection Error!".$!;
+ $stat = encode("utf8", $stat);
+ # open FILE,">>tmp/sql.log";
+ # print FILE "$stat\n";
+ # close FILE;
+ # print STDERR "QUERY:\n".$stat."\n===\n";
+ my $sth = $self->{dbh}->prepare($stat) or return $retdata->{error} = "query".$self->{dbh}->errstr. "- SQL: ".$stat;;
+
+
+ $sth->execute() or return $retdata->{error} = "query: ".$sth->errstr;
+
+ my $data = $sth->fetchrow_hashref();
+ foreach my $k (keys %{$data}){
+ $retdata->{$k} = $data->{$k};#decode("utf-8",$data->{$k});
+ }
+
+ $sth->finish();
+ #$self->{dbh}->disconnect();
+
+ return $retdata;
+}
+
sub query(){
my $self = shift;
my $stat = shift;
+++ /dev/null
-package pdfreport;
-
-use strict;
-use Template;
-use File::Basename qw/dirname basename/;
-use Data::Dumper;
-use File::Copy::Recursive qw(dircopy);
-use lib ('./lib/perl5');
-use lib ('./lib');
-use lib ('./');
-use dksconfig qw($sitecfg);
-
-sub new {
- my $class = shift;
- my $p = shift;
- my $self = bless {}, $class;
- $self->{tmplpath} =$p->{tmplpath};
- $self->{tmp} =$p->{tmp};
- $self->{pdf} = undef;
- $self->{template} = undef;
- #$self->{template} = $p->{template};
- $self->{pdf}->{app} = dirname($ENV{SCRIPT_FILENAME})."/tools/bin/wkhtmltopdf";
- return $self;
-}
-
-sub createpdf(){
- my $self = shift;
- my $template = shift;
- my $output = shift;
- my $inputdata = shift;
- my $r = -1;
- #print STDERR $self->{tmplpath}.'/'.$template.'.conf'."\n";
- if (-e $self->{tmplpath}.'/'.$template.'.conf'){
- $self->readpdfconfig($template,$inputdata);
- #print Dumper($self->{template});
- } else {
- #print STDERR $self->{tmplpath}.'/'.$template.'.conf'." does not exist!\n";
- }
- #print STDERR"PDF:".Dumper($self->{pdf});
- #print STDERR "TMPL:".Dumper($self->{template});
- #print STDERR "SELF:".Dumper($self->{tmplpath});
- my $tmpreportpath=$self->{tmplpath};
- if (exists($self->{pdf}->{engine}) && ($self->{pdf}->{engine} eq "Template::Toolkit")){
- $template = $self->createTTReport($template);
- $tmpreportpath = $self->{tmp};
- }
- #print STDERR "HTMLMAIN:".$tmpreportpath.'/'.$template.'.html';
- if ((keys(%{$self->{pdf}}) > 0) && (-e $tmpreportpath.'/'.$template.'.html')){
- my $cmd = '"'.$self->{pdf}->{app}.'"';
- if ($self->{pdf}->{bottom}){ $cmd .= " -B ".$self->{pdf}->{bottom}; }
- if ($self->{pdf}->{left}){ $cmd .= " -L ".$self->{pdf}->{left}; }
- if ($self->{pdf}->{right}){ $cmd .= " -R ".$self->{pdf}->{right}; }
- if ($self->{pdf}->{top}){ $cmd .= " -T ".$self->{pdf}->{top}; }
- if ($self->{pdf}->{orientation}){ $cmd .= " -O ".$self->{pdf}->{orientation}; }
- if ($self->{pdf}->{size}){ $cmd .= " -s ".$self->{pdf}->{size}; }
- if ($self->{pdf}->{encoding}){ $cmd .= " --encoding '".$self->{pdf}->{encoding}."'"; }
- if (-e $tmpreportpath.'/'.$template.'.header.html'){
- $cmd .= ' --header-html "'.$tmpreportpath.'/'.$template.'.header.html"';
- }
- if (-e $tmpreportpath.'/'.$template.'.footer.html'){
- $cmd .= ' --footer-html "'.$tmpreportpath.'/'.$template.'.footer.html"';
- }
- $cmd .= ' "'.$tmpreportpath.'/'.$template.'.html"';
- $cmd .= ' "'.$output.'"';
- #print STDERR $cmd."\n";
- $r = system($cmd);
- }
- if (-e $output){
- unlink($tmpreportpath.'/'.$template.'.html');
- unlink($tmpreportpath.'/'.$template.'.header.html');
- unlink($tmpreportpath.'/'.$template.'.footer.html');
- return ($r,$output);
- }
- return ($r,undef);
-}
-
-sub createTTReport(){
- my $self = shift;
- my $template = shift;
- my $uniquekey = $$;
- if (-e $self->{tmplpath}.'/'.$template.".tt"){
- $self->TTtoHTML($self->{tmplpath}.'/'.$template.".tt",$self->{tmp}.'/'.$template.$$.".html");
- }
- if (-e $self->{tmplpath}.'/'.$template.".header.tt"){
- $self->TTtoHTML($self->{tmplpath}.'/'.$template.".header.tt",$self->{tmp}.'/'.$template.$$.".header.html");
- }
- if (-e $self->{tmplpath}.'/'.$template.".footer.tt"){
- $self->TTtoHTML($self->{tmplpath}.'/'.$template.".footer.tt",$self->{tmp}.'/'.$template.$$.".footer.html");
- }
- if (-d $self->{tmplpath}.'/'.$template){
- dircopy($self->{tmplpath}.'/'.$template,$self->{tmp}.'/'.$template);
- }
-
- return $template.$$;
-}
-
-sub TTtoHTML(){
- my $self = shift;
- my $ttfile = shift;
- my $outfile = shift;
- $self->{template}->{dsn} = $sitecfg->{dsn};
- $self->{template}->{dbuser} = $sitecfg->{dbuser};
- $self->{template}->{dbpassword} = $sitecfg->{dbpassword};
- #print Dumper($self->{template});
- my $template = Template->new({INCLUDE_PATH => [dirname($ttfile)]});#,ENCODING => 'utf8'
- $template->process(basename($ttfile),$self->{template},$outfile) || die "Template process failed: ", $template->error(), "\n";#,{binmode => ':utf8'}
-}
-
-sub readpdfconfig(){
- my $self = shift;
- my $template = shift;
- my $inputdata = shift;
- open(CFG,$self->{tmplpath}.'/'.$template.'.conf');
- while (my $l = <CFG>){
- chomp($l);
- #print $l."\n";
- $l =~ s/^\s+//;
- if (($l =~ /^#/) || ($l eq "")) {next;}
- if ($l =~ /\w+=.+/){
- my ($k1,$k2,$v) = $l =~ m/^(\w+)_(\w+)=\"(.+)\"$/;
- $self->{lc($k1)}->{lc($k2)} = $v;
- }
- }
- close(CFG);
- foreach my $ik (keys(%{$inputdata})){
- $self->{template}->{lc($ik)} = $inputdata->{$ik};
- }
-}
-1;
\ No newline at end of file
#!/usr/local/bin/perl
use strict;
-use FindBin qw($RealBin $Bin);
-use lib ($RealBin.'/lib/perl5');
-use lib ($RealBin.'/lib');
+use lib ('./lib/perl5');
+use lib ('./lib');
use CGI;
use CGI::Cookie;
use Encode;
use dksconfig qw/$sitecfg/;
use dksdb;
use session;
-use pdfreport;
+use POT::Report;
+#use pdfreport;
my $cgi = new CGI();
my $scriptpath = $cgi->url(-absolute => 1);
$p->{$k} = $pdj->{$k};
}
}
+my $db = dksdb->new({dsn => $sitecfg->{dsn},dbuser => $sitecfg->{dbuser},dbpassword => $sitecfg->{dbpassword}});
#print STDERR Dumper($p)."\n";
my $html->{result} = ();
$p->{sid} = $cgi->cookie($sitecfg->{cookiename});
-my $se = session->new();
+my $se = session->new({db => $db});
my $sess = $se->getsession($p->{sid});
if ($sess == undef){
if (($cgi->request_method() eq "GET") || ($cgi->request_method() eq "POST")){
- # my @params = $cgi->param();
- # foreach my $pp (@params){
- # $p->{$pp} = $cgi->param($pp);
- # }
-
- # if (exists($p->{list})){
- # #$html->{param} = $p;
- # print $cgi->header(-type=>"application/json", -charset => "utf-8");
- # my $reppath = $sitecfg->{docroot}.'/'.$sitecfg->{datapath}.'reports/'.$p->{list};
- # $html->{path} = $reppath;
- # if (-d $reppath){
- # #print "OK!";
- # my @allreps = ();
- # opendir(REP,$reppath);
- # while (my $f = readdir(REP)){
- # if ($f =~ /\.conf$/){
- # my $rep->{name}= $f;
- # $rep->{name} =~ s/\.conf$//;
- # $rep->{label} = $rep->{name};
-
- # open(RTPL,$reppath.'/'.$f);
- # while (my $l = <RTPL>){
- # chomp($l);
- # if ($l =~ /^REPORT_NAME/){
- # my ($k1,$k2,$v) = $l =~ m/^(\w+)_(\w+)=\"(.+)\"$/;
- # $rep->{label} = decode("utf-8",$v);
- # }
- # }
- # close(RTPL);
- # push(@allreps,$rep);
- # }
- # }
- # closedir(REP);
- # $html->{result}->{reports} = \@allreps;
- # }
- # }
if (exists($p->{generate})){
print $cgi->header(-type=>"application/json", -charset => "utf-8");
- #print Dumper($p->{data});
- #$html->{params} = $p;
- #print STDERR ref($p->{data});
my $data = ();
if (ref($p->{data}) ne "HASH"){
$data = JSON::PP::decode_json($p->{data});
if (exists($data->{schemata})){
$schemata = $data->{schemata};
}
- my $reportpath =$sitecfg->{docroot}.'/'.$sitecfg->{datapath}.'reports/'.dirname($p->{generate});
my $tmppath = $sitecfg->{docroot}.'/'.$sitecfg->{datapath}.'tmp/';
my $output = $sitecfg->{docroot}.'/'.$sitecfg->{datapath}.'output/'.$schemata."/";
- #$html->{params} = $p;
- #$html->{options}->{reportpath} = $reportpath;
- #$html->{options}->{tmppath} = $tmppath;
- #$html->{options}->{output} = $output;
- # #print $reportpath."\n".$tmppath."\n".$output."\n".$output.dirname($p->{generate})."\n";
if (! -d $tmppath) { make_path($tmppath);}
if (! -d $output) { make_path($output);}
- if (! -d $output.dirname($p->{generate})){make_path($output.dirname($p->{generate}));}
- #print STDERR "OUTPUT:".$output."\n";
- my $rep = pdfreport->new({tmplpath => $reportpath.'/', tmp => $tmppath});
- my ($result,$file) = $rep->createpdf(basename($p->{generate}),$output.dirname($p->{generate}).'/'.$p->{file},$data);
- #print STDERR Dumper($result,$file);
- #my $file = $p->{file};
-
+ if (! -d $output.$p->{generate}){make_path($output.$p->{generate});}
+ my $rep = POT::Report->new({db => $db,tmp => $tmppath});
+ my ($result,$file) = $rep->createpdf($schemata,$p->{generate},$output.dirname($p->{generate}).'/'.'/'.$p->{file},$data);
$html->{result}->{file} = (($file)?$schemata.'/'.substr($file,length($output)):"");
}
elsif (exists($p->{open})){
}
}
print JSON::PP::encode_json($html);
-# for my $e ( keys %ENV ) {
-# print "$e: $ENV{$e}<br/>";
-# }
\ No newline at end of file
if (document.getElementById('dlg_' +dlgname)){
document.getElementById('dlg_' +dlgname).style.display = 'block';
} else {
- console.log('dlg_' +dlgname + ' does not exist!');
+ //console.log('dlg_' +dlgname + ' does not exist!');
}
},
opendlg: function(dlgname,msgdata,callback){
fdata["value"] = obj.value;
}
}
- console.log("Save",fdata);
+ //console.log("Save",fdata);
postData("db.cgi",fdata).then(data => { if (callback){callback(data);}});
return false;
},
remove: function(){
let udata = companies.tbl.getSelectedData();
if (udata[0]) {
- console.log(udata[0]);
+ //console.log(udata[0]);
flds = {};
flds["fn"] = "del_company";
flds["id"] = udata[0].id;
delete wkdata["ident_staffgroups_id_staffgroups"];
delete wkdata["null"];
wkdata["fn"] ="saveform";wkdata["table"]="staffgroups";
- console.log("before save current:",companies.current_schemata);
+ //console.log("before save current:",companies.current_schemata);
wkdata["schemata"]=companies.current_schemata;
postData("db.cgi",wkdata).then(data => {
staffgroups.gettbldata();
delete wkdata["ident_worktimes_id_worktimes"];
delete wkdata["null"];
wkdata["schemata"] = schemata;
- console.log(wkdata);
+ //console.log(wkdata);
postData("db.cgi",wkdata).then(data => {
worktimes.gettbldata();
document.getElementById('dlg_worktimes').style.display='none';
//console.log("Shcemata",schemata);
dataform.cleanform2("company",company.choices);
postData( "db.cgi", { "get": "company","schemata":"public", "schemata":schemata}).then(data => {
- console.log("cp result",data);
+ //console.log("cp result",data);
dataform.fillformbydataclass2("companies",company.choices,data.result.data);
company.current_company = data.result.data.id;
// },
gettbldatafilter: function(){
postData("db.cgi", { "get": "periods","schemata":schemata}).then(data => {
- console.log("periods",data);
+ //console.log("periods",data);
reportperiod.tblfilter.setData(data.result.sqldata);
});
});
},
generatereport: function(){
+
let udata = reportperiod.tblfilter.getSelectedData();
- let repdata = {"schemata":schemata,"id_reportperiod":udata[0].id};
+ let sdata = reportperiod.tbl.getSelectedData();
+ let staffexcl = [];
+ for (var s in sdata){
+ staffexcl.push(sdata[s].id_staff);
+ }
+ let repdata = {"schemata":schemata,"id_reportperiod":udata[0].id,"staff_exclude":staffexcl};
if (udata[0]) {
- report.generate('pot/pot_staffmember_period',"periode_" + moment(udata[0].startdate).format("YYYYMMDD") + "-" + moment(udata[0].enddate).format("YYYYMMDD"),repdata);
+ report.generate('pot',"periode_" + moment(udata[0].startdate).format("YYYYMMDD") + "-" + moment(udata[0].enddate).format("YYYYMMDD"),repdata);
}
},
datarefresh: function(){
document.getElementById("rppayedhours_infomsg").innerHTML = '';
//console.log(prd[0]);
//if (prd[0] && prd[0].hoursdiff != '00:00' && prd[0].hoursdiff.indexOf("-") == -1){
- console.log("open payed hours!");
+ //console.log("open payed hours!");
document.getElementById("title_rppayedhours").innerHTML = "Période du " +moment(prd[0].startdate).format("DD.MM.YYYY") + " au " + moment(prd[0].enddate).format("DD.MM.YYYY");
document.getElementById("id_staffreportperiod").value=prd[0].id;
document.getElementById("payedhours").value=prd[0].payedhours;
rpdata["fn"] ="saveform";rpdata["fn"] ="staffreportperiod";
rpdata["schemata"] = schemata;
let prd = reportperiod.tbl.getSelectedData();
- console.log("transfer to save",rpdata);
+ //console.log("transfer to save",rpdata);
//let maxinterval = prd[0].hoursdiff;
// if (maxinterval < rpdata["staffreportperiod_payedhours"]){
// document.getElementById("rppayedhours_infomsg").innerHTML = '<div class="panel error-panel">les heures "heures payés" ne peuvent pas être suppérieur aux heures "à récupérer"</div>';
postData("db.cgi",{"get":"periodweeksums","schemata":schemata,"id_staff":selrp[0].id_staff,"date_start":weekmonstart,"date_end":weeksunend}).then(data => {
//console.log(data);
staffperiodweeks.weekdata = data.result.data;
- console.log("WeekData",staffperiodweeks.weekdata);
+ //console.log("WeekData",staffperiodweeks.weekdata);
//console.log(JSON.stringify({ "vw": "staffreportperioddays_new","schemata":schemata,"filter":"id_staff='" + selrp[0].id_staff + "' and daydate between date('"+weekmonstart+ "') and date('" +weeksunend+"')"}));
postData("db.cgi",{ "get": "perioddays","schemata":schemata,"id_staff":selrp[0].id_staff,"date_start":weekmonstart,"date_end":weeksunend}).then(data => {
- console.log("perioddays",data);
+ //console.log("perioddays",data);
if (data && data.result.sqldata) { staffperiodweeks.tbl.setData(data.result.sqldata);}
});
})
loadplan: function(parenttbl){
staffperiodweeks.parenttbl = parenttbl;
let selrp = staffperiodweeks.parenttbl.getSelectedData();
- console.log("weekplan",selrp);
+ //console.log("weekplan",selrp);
if (selrp[0]) {
document.getElementById("periodtitle").innerHTML=" Période " + moment(selrp[0].startdate).format('DD.MM.YYYY') + "-" + moment(selrp[0].enddate).format('DD.MM.YYYY');
document.getElementById("stafftitle").innerHTML= selrp[0].staffname + "(" + selrp[0].groupname + ")";
dataform.fillformbydataclass2("staffreportperioddays",staffperiodweeks.choices,staffperiodweeks.currentday);
document.getElementById("display_date").innerHTML=moment(staffperiodweeks.currentday.daydate).format("dddd , DD.MM.YYY");
postData("db.cgi",{"fn":"getworktimelimits","daydate":cday[0].daydate,"id_staff":cday[0].id_staff,"schemata":schemata}).then(data => {
- console.log("daylimits",data);
+ //console.log("daylimits",data);
if (data.result){
staffperiodweeks.dayrefdata =data.result;
document.getElementById("infomaxdayhours").value=data.result.maxdayhours;
//console.log("replacedays",{"schemata":schemata,"fn":"replace_staffperiodweekdayhours","id_workplan":id_workplan,"keepvac":keepvac,"keeprec":keeprec,"replaceids":asel});
postData("db.cgi",{"schemata":schemata,"fn":"replace_staffperiodweekdayhours","id_staff":selrp[0].id_staff,"id_period":selrp[0].id_reportperiod,"id_workplan":id_workplan,"keepvac":keepvac,"keeprec":keeprec,"replaceids":asel}).then(data => {
- console.log(data);
+ //console.log(data);
document.getElementById('dlg_replacestaffdayworkplan').style.display='none';
staffperiodweeks.gettbldata();
}).catch(e => { console.log("ERROR replaceids",e);});
gettbldata: function(id){
let selectedData = staff.tbl.getSelectedData();
postData("db.cgi",{ "get": "stafflist","schemata":schemata}).then(data => {
- console.log("Stafftabledata!",data);
+ //console.log("Stafftabledata!",data);
staff.tbl.setData(data.result.sqldata).then(function(){
if(selectedData[0]){staff.tbl.selectRow(selectedData[0]['id']);}
});
staff.current_id = udata[0].id;
dataform.cleanform2("staff",staff.choices);
postData("db.cgi",{ "get":"staff","schemata":schemata,"id":udata[0].id}).then(data => {
- console.log("staffresult",data);
+ //console.log("staffresult",data);
dataform.fillformbydataclass2("staff",staff.choices,data.result.data,'dataform.savefield(this,null);');
staffcontract.gettbldata();
staffperiods.gettbldata();
},
gettbldata: function(){
- console.log({ "get": "staffcontractdates","schemata":schemata,"id_staff:":staff.current_id});
+ //console.log({ "get": "staffcontractdates","schemata":schemata,"id_staff:":staff.current_id});
postData("db.cgi", { "get": "staffcontractdates","schemata":schemata,"id_staff":staff.current_id}).then(data => {
- console.log("staffcontract",data);
+ //console.log("staffcontract",data);
if (data && data.result.sqldata) {
- console.log("staffcontract datasize",data.result.sqldata.length);
+ // console.log("staffcontract datasize",data.result.sqldata.length);
if (data.result.sqldata.length <= 1){
document.getElementById("btn_delete_staffcontract").style.display= 'none';
}else {
remove: function(){
let udata = staffcontract.tbl.getSelectedData();
if (udata[0]) {
- console.log("del contract data",udata[0]);
+ //console.log("del contract data",udata[0]);
var flds = {};
flds["fn"] = "del_staffcontract";
flds["id"] = udata[0].id;
}
},
removedata: function(data){
- console.log("Data to remove",data);
+ //console.log("Data to remove",data);
// showdataloaddlg('','<div class="xxlarge">Attendez s.v.p.!</div>');
postData("db.cgi",data).then(data => {
staffcontract.gettbldata();
document.getElementById('dlg_staffcontract').style.display='none';
showdataloaddlg('','<div class="xxlarge">Attendez s.v.p.!</div>');
postData("db.cgi",flds).then(data => {
- console.log("contract data returned",data);
+ //("contract data returned",data);
staffcontract.gettbldata();
//dataform.formsaved({});
staffcontract.updateStaffContractDays(flds["staffcontract_id_staff"]);
},
gettbldata: function(){
postData("db.cgi",{ "get":"staffperiods","schemata":schemata,"id_staff":staff.current_id}).then(data => {
- console.log("perioddata",data);
+ //console.log("perioddata",data);
staffperiods.tbl.setData(data.result.sqldata);
});
},
let udata = staffperiods.tbl.getSelectedData();
let rpids = [];
for (var i in udata){
- rpids.push("'"+udata[i].id_reportperiod+ "'");
+ rpids.push(udata[i].id_reportperiod);
}
- let repdata = {"schemata":schemata,"id_staff":udata[0].id_staff,"id_periodlist":rpids.join(',')};
- console.log(udata);
- console.log(repdata);
+ let repdata = {"schemata":schemata,"id_staff":staff.current_id,"id_periods":rpids};
+ //console.log(udata);
+ //console.log(repdata);
if (udata[0]) {
- report.generate('pot/pot_period',udata[0].staffname.replace(/\s+/g,"_")+"_" + moment(udata[0].startdate).format("YYYYMMDD") + "-" + moment(udata[0].enddate).format("YYYYMMDD"),repdata);
+ report.generate('pot',udata[0].staffname.replace(/\s+/g,"_")+"_" + moment(udata[0].startdate).format("YYYYMMDD") + "-" + moment(udata[0].enddate).format("YYYYMMDD"),repdata);
}
},
showdlgpayedhours: function(){
rpdata["fn"] ="saveform";rpdata["table"]="staffreportperiod";
rpdata["schemata"] = schemata;
- console.log("transfer to save",rpdata);
+ //console.log("transfer to save",rpdata);
let prd = staffperiods.tbl.getSelectedData();
// let maxinterval = prd[0].hoursdiff;
// if (maxinterval < rpdata["staffreportperiod_payedhours"]){
workplans.initform();
},
gettblfilterdata: function(){
- console.log({"get": "workplanlist" ,"schemata":schemata});
+ //console.log({"get": "workplanlist" ,"schemata":schemata});
postData("db.cgi", {"get": "workplanlist" ,"schemata":schemata}).then(data => {
workplans.tblfilter.setData(data.result.sqldata);
});
pasteday: function(){
let cdata = workplans.tbl.getSelectedData();
if (cdata[0] && workplans.copy_day_id &&cdata[0].id != workplans.copy_day_id){
- console.log("Wplancopy",{"fn":"workplan_replaceday","schemata":schemata,"copyid":workplans.copy_day_id,"pasteid":cdata[0].id});
+ //console.log("Wplancopy",{"fn":"workplan_replaceday","schemata":schemata,"copyid":workplans.copy_day_id,"pasteid":cdata[0].id});
postData("db.cgi",{"fn":"workplan_replaceday","schemata":schemata,"copyid":workplans.copy_day_id,"pasteid":cdata[0].id}).then(data => {workplans.gettbldata()});
}
},
wpdatanew["fn"] ="saveform";wpdatanew["table"] ="workplandays";
wpdatanew["schemata"]=schemata;
delete wpdatanew["null"];
- console.log(wpdatanew);
+ //console.log(wpdatanew);
postData("db.cgi",wpdatanew).then(data => {
document.getElementById('dlg_workplanday').style.display='none';
workplans.gettbldata();