v20200827
authorkilian <ksaffran@dks.lu>
Thu, 27 Aug 2020 12:57:35 +0000 (14:57 +0200)
committerkilian <ksaffran@dks.lu>
Thu, 27 Aug 2020 12:57:35 +0000 (14:57 +0200)
29 files changed:
website/app/data/reports/pot/pot_period.conf [deleted file]
website/app/data/reports/pot/pot_period.footer.tt [deleted file]
website/app/data/reports/pot/pot_period.header.tt [deleted file]
website/app/data/reports/pot/pot_period.tt [deleted file]
website/app/data/reports/pot/pot_period/pot.ttf [deleted file]
website/app/data/reports/pot/pot_period/pot.ttf.b64.txt [deleted file]
website/app/data/reports/pot/pot_staffmember_period.conf [deleted file]
website/app/data/reports/pot/pot_staffmember_period.footer.tt [deleted file]
website/app/data/reports/pot/pot_staffmember_period.header.tt [deleted file]
website/app/data/reports/pot/pot_staffmember_period.tt [deleted file]
website/app/data/reports/pot/pot_staffmember_period/pot.ttf [deleted file]
website/app/data/reports/pot/pot_staffmember_period/pot.ttf.b64.txt [deleted file]
website/app/lib/POT/Period.pm
website/app/lib/POT/Report.pm
website/app/lib/dksdb.pm
website/app/lib/pdfreport.pm [deleted file]
website/app/report.cgi
website/app/static/js/app.js
website/app/static/js/dataform.js
website/app/tmpl/module/admin/schemadataset.js
website/app/tmpl/module/admin/staffgroups.js
website/app/tmpl/module/admin/worktimes.js
website/app/tmpl/module/company/company.js
website/app/tmpl/module/periods/reportperiod.js
website/app/tmpl/module/periods/staffperiodweeks.js
website/app/tmpl/module/staff/staff.js
website/app/tmpl/module/staff/staffcontract.js
website/app/tmpl/module/staff/staffperiods.js
website/app/tmpl/module/workplans/workplans.js

diff --git a/website/app/data/reports/pot/pot_period.conf b/website/app/data/reports/pot/pot_period.conf
deleted file mode 100644 (file)
index 635bcde..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-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
diff --git a/website/app/data/reports/pot/pot_period.footer.tt b/website/app/data/reports/pot/pot_period.footer.tt
deleted file mode 100644 (file)
index 6f32a0c..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-<!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>&nbsp;<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
diff --git a/website/app/data/reports/pot/pot_period.header.tt b/website/app/data/reports/pot/pot_period.header.tt
deleted file mode 100644 (file)
index 5f67e44..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-[% 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>
diff --git a/website/app/data/reports/pot/pot_period.tt b/website/app/data/reports/pot/pot_period.tt
deleted file mode 100644 (file)
index 70c4447..0000000
+++ /dev/null
@@ -1,222 +0,0 @@
-[% 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>&nbsp;</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 %]&nbsp;[% END %]</td>
-            </tr>
-            <tr>
-              <td class="datavalues"> [% IF pw.timestart2 %][% pw.timestart2 %][% END %]</td>
-              <td class="datavalues">[% IF pw.timestart2 %][% pw.timeend2 %][% ELSE %]&nbsp;[% END %]</td>
-              <td class="datavalues" >[% IF pw.recuperationhours %]<span style="text-decoration: underline;">[% pw.recuperationhours %]</span>[% ELSE %]&nbsp;[% END %]</td>
-            </tr>
-            <tr>
-              <td>&nbsp;</td>
-              <td>&nbsp;</td>
-              <td class="datavalues" >[% IF pw.vacancyhours %]<span style="font-style: italic;">[% pw.vacancyhours %][%ELSE%]&nbsp;[% 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>&nbsp;</td>
-            </tr>
-            </table>
-            </td>
-          [% ELSE %]
-          <td>&nbsp;</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 %]&nbsp;[%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 %]&nbsp;[%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 %]&nbsp;[%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 %]&nbsp;[%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
diff --git a/website/app/data/reports/pot/pot_period/pot.ttf b/website/app/data/reports/pot/pot_period/pot.ttf
deleted file mode 100644 (file)
index df5809e..0000000
Binary files a/website/app/data/reports/pot/pot_period/pot.ttf and /dev/null differ
diff --git a/website/app/data/reports/pot/pot_period/pot.ttf.b64.txt b/website/app/data/reports/pot/pot_period/pot.ttf.b64.txt
deleted file mode 100644 (file)
index 33519cd..0000000
+++ /dev/null
@@ -1 +0,0 @@
-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
diff --git a/website/app/data/reports/pot/pot_staffmember_period.conf b/website/app/data/reports/pot/pot_staffmember_period.conf
deleted file mode 100644 (file)
index 768e43e..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-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
diff --git a/website/app/data/reports/pot/pot_staffmember_period.footer.tt b/website/app/data/reports/pot/pot_staffmember_period.footer.tt
deleted file mode 100644 (file)
index 6f32a0c..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-<!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>&nbsp;<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
diff --git a/website/app/data/reports/pot/pot_staffmember_period.header.tt b/website/app/data/reports/pot/pot_staffmember_period.header.tt
deleted file mode 100644 (file)
index 5f67e44..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-[% 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>
diff --git a/website/app/data/reports/pot/pot_staffmember_period.tt b/website/app/data/reports/pot/pot_staffmember_period.tt
deleted file mode 100644 (file)
index f420a67..0000000
+++ /dev/null
@@ -1,226 +0,0 @@
-[% 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>&nbsp;</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 %]&nbsp;[% END %]</td>
-            </tr>
-            <tr>
-              <td class="datavalues"> [% IF pw.timestart2 %][% pw.timestart2 %][% END %]</td>
-              <td class="datavalues">[% IF pw.timestart2 %][% pw.timeend2 %][% ELSE %]&nbsp;[% END %]</td>
-              <td class="datavalues" >[% IF pw.recuperationhours %]<span style="text-decoration: underline;">[% pw.recuperationhours %]</span>[% ELSE %]&nbsp;[% END %]</td>
-            </tr>
-            <tr>
-              <td>&nbsp;</td>
-              <td>&nbsp;</td>
-              <td class="datavalues" >[% IF pw.vacancyhours %]<span style="font-style: italic;">[% pw.vacancyhours %][%ELSE%]&nbsp;[% 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>&nbsp;</td>
-            </tr>
-            </table>
-            </td>
-          [% ELSE %]
-          <td>&nbsp;</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 %]&nbsp;[%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 %]&nbsp;[%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 %]&nbsp;[%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 %]&nbsp;[%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
diff --git a/website/app/data/reports/pot/pot_staffmember_period/pot.ttf b/website/app/data/reports/pot/pot_staffmember_period/pot.ttf
deleted file mode 100644 (file)
index df5809e..0000000
Binary files a/website/app/data/reports/pot/pot_staffmember_period/pot.ttf and /dev/null differ
diff --git a/website/app/data/reports/pot/pot_staffmember_period/pot.ttf.b64.txt b/website/app/data/reports/pot/pot_staffmember_period/pot.ttf.b64.txt
deleted file mode 100644 (file)
index 33519cd..0000000
+++ /dev/null
@@ -1 +0,0 @@
-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
index bfefcd4..30c6b07 100644 (file)
@@ -186,7 +186,7 @@ sub getPeriodDays(){
             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,
index 9e9fb8c..f3c954a 100644 (file)
@@ -1,19 +1,68 @@
 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>
@@ -26,9 +75,9 @@ sub printHeader(){
     </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>
@@ -99,75 +148,24 @@ sub printContent(){
   <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 }
@@ -176,33 +174,81 @@ tfoot { display:table-footer-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>
@@ -214,94 +260,191 @@ sub ReportPage(){
       <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>&nbsp;</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 %]&nbsp;[% END %]</td>
-            </tr>
-            <tr>
-              <td class=\"datavalues\"> [% IF pw.timestart2 %][% pw.timestart2 %][% END %]</td>
-              <td class=\"datavalues\">[% IF pw.timestart2 %][% pw.timeend2 %][% ELSE %]&nbsp;[% END %]</td>
-              <td class=\"datavalues\" >[% IF pw.recuperationhours %]<span style=\"text-decoration: underline;\">[% pw.recuperationhours %]</span>[% ELSE %]&nbsp;[% END %]</td>
-            </tr>
-            <tr>
-              <td>&nbsp;</td>
-              <td>&nbsp;</td>
-              <td class=\"datavalues\" >[% IF pw.vacancyhours %]<span style=\"font-style: italic;\">[% pw.vacancyhours %][%ELSE%]&nbsp;[% 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>&nbsp;</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>&nbsp;</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 %]&nbsp;[%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 %]&nbsp;[%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 %]&nbsp;[%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 %]&nbsp;[%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&eacuteriode: ".$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&eacute;s:</td>
+      <th style=\"width: 15mm;\">".$data->{vacancyhours}."</th>
+      <td style=\"text-align: right;\">r&eacute;cup&eacute;r&eacute;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&eacute;compte<br/>report&eacute;:</td>
+      <th style=\"width: 15mm;\">".$data->{transferedhourscalc}."</th>
+      <td style=\"text-align: right;\">heures<br/>pay&eacute;es:</td>
+      <th style=\"width: 15mm;\">".$data->{payedhours}."</th>
+      <td style=\"text-align: right;\">d&eacute;compte<br/>fin POT:</td>
+      <th style=\"width: 15mm;\">".$data->{hoursdiff}."</th>
+      <td style=\"text-align: right;\">cong&eacute; suppl<br/>+44h:</td>
+      <th style=\"width: 15mm;\">".$data->{suppvacancy44hours}."</th>
+      <td style=\"text-align: right;\">cong&eacute; suppl.<br/>dimache travaill&eacute;:</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
index 03c83fb..6957708 100644 (file)
@@ -45,6 +45,33 @@ sub value(){
   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;
diff --git a/website/app/lib/pdfreport.pm b/website/app/lib/pdfreport.pm
deleted file mode 100644 (file)
index ef2322e..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-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
index c1dadc9..921d6a9 100644 (file)
@@ -1,8 +1,7 @@
 #!/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;
@@ -15,7 +14,8 @@ use File::Path qw(make_path);
 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); 
@@ -35,10 +35,11 @@ if (exists($p->{"POSTDATA"})){
       $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){
@@ -50,47 +51,8 @@ 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});
@@ -101,23 +63,13 @@ if (($cgi->request_method() eq "GET") || ($cgi->request_method() eq "POST")){
     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})){
@@ -148,6 +100,3 @@ if (($cgi->request_method() eq "GET") || ($cgi->request_method() eq "POST")){
   }
 }
 print JSON::PP::encode_json($html);
-# for my $e ( keys %ENV ) {
-#     print "$e: $ENV{$e}<br/>";
-# }
\ No newline at end of file
index b5ebd4f..8388c9b 100644 (file)
@@ -59,7 +59,7 @@ let app = {
       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){
index e11958f..ccebd84 100644 (file)
@@ -251,7 +251,7 @@ savefield: function(obj,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;
 },
index dfc3ea4..402be17 100644 (file)
@@ -15,7 +15,7 @@ let schemadataset= {
   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;
index d57e59c..253e7a6 100644 (file)
@@ -74,7 +74,7 @@ let staffgroups = {
     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();
index 9687dbb..605dc86 100644 (file)
@@ -93,7 +93,7 @@ let worktimes = {
     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';
index 4efded6..fe7f31a 100644 (file)
@@ -36,7 +36,7 @@ let company = {
         //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;
index 2b55194..b5f7420 100644 (file)
@@ -82,7 +82,7 @@ let reportperiod ={
   // },
   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);
     });
     
@@ -105,10 +105,16 @@ let reportperiod ={
     });
   },
   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(){
@@ -133,7 +139,7 @@ let reportperiod ={
     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;
@@ -150,7 +156,7 @@ let reportperiod ={
     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>';
index f7ea24d..01ebeb9 100644 (file)
@@ -96,10 +96,10 @@ let staffperiodweeks = {
     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);}
       });
     })
@@ -109,7 +109,7 @@ let staffperiodweeks = {
   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="&nbsp;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 + ")";
@@ -173,7 +173,7 @@ let staffperiodweeks = {
       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;
@@ -468,7 +468,7 @@ let staffperiodweeks = {
     //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);});
index 0917eeb..b810be4 100644 (file)
@@ -76,7 +76,7 @@ let staff ={
   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']);}
       });
@@ -126,7 +126,7 @@ let staff ={
       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();
index a18b5c6..d5754a4 100644 (file)
@@ -43,11 +43,11 @@ let staffcontract = {
 
   },
   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 {
@@ -79,7 +79,7 @@ let staffcontract = {
   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;
@@ -88,7 +88,7 @@ let staffcontract = {
     }
   },
   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();
@@ -118,7 +118,7 @@ let staffcontract = {
     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"]);
index 4f8da8a..7d14f29 100644 (file)
@@ -34,7 +34,7 @@ let staffperiods = {
   },
   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);
     });
   },
@@ -55,13 +55,13 @@ let staffperiods = {
     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(){
@@ -86,7 +86,7 @@ let staffperiods = {
     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"]){
index 1a48564..bf95745 100644 (file)
@@ -81,7 +81,7 @@ let workplans ={
    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);
     });
@@ -148,7 +148,7 @@ let workplans ={
   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()}); 
     }
   },
@@ -199,7 +199,7 @@ let workplans ={
     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();