From d5251b1170197db0a1aaf87c92f171ed86dcf152 Mon Sep 17 00:00:00 2001 From: Kilian Saffran Date: Tue, 4 Feb 2020 17:09:41 +0100 Subject: [PATCH] v20200204 --- backoffice/api/index.cgi | 9 +- backoffice/api/lib/pdfreport.pm | 25 +- backoffice/api/report.cgi | 7 +- backoffice/css/w3pro.min.css | 1 + .../periode_20191230-20200223_pot_period.pdf | Bin 0 -> 17684 bytes .../data/reports/pot/pot_period.footer.tt | 5 +- .../data/reports/pot/pot_period.header.tt | 23 +- backoffice/data/reports/pot/pot_period.tt | 61 +--- .../data/tmp/pot_period26608.footer.html | 36 +++ .../data/tmp/pot_period26608.header.html | 28 ++ backoffice/data/tmp/pot_period26608.html | 71 +++++ .../data/tmp/pot_period28641.footer.html | 36 +++ .../data/tmp/pot_period28641.header.html | 28 ++ backoffice/data/tmp/pot_period28641.html | 71 +++++ .../data/tmp/pot_period28649.footer.html | 36 +++ .../data/tmp/pot_period28649.header.html | 28 ++ backoffice/data/tmp/pot_period28649.html | 71 +++++ .../data/tmp/pot_period29062.footer.html | 36 +++ .../data/tmp/pot_period29062.header.html | 28 ++ backoffice/data/tmp/pot_period29062.html | 71 +++++ .../data/tmp/pot_period29082.footer.html | 36 +++ .../data/tmp/pot_period29082.header.html | 28 ++ backoffice/data/tmp/pot_period29082.html | 71 +++++ .../data/tmp/pot_period29092.footer.html | 36 +++ .../data/tmp/pot_period29092.header.html | 28 ++ backoffice/data/tmp/pot_period29092.html | 71 +++++ .../data/tmp/pot_period29104.footer.html | 36 +++ .../data/tmp/pot_period29104.header.html | 28 ++ backoffice/data/tmp/pot_period29104.html | 71 +++++ backoffice/data/tmp/pot_period29123.html | 71 +++++ backoffice/data/tmp/pot_period29127.html | 71 +++++ .../data/tmp/pot_period29134.footer.html | 36 +++ .../data/tmp/pot_period29134.header.html | 31 ++ backoffice/data/tmp/pot_period29134.html | 71 +++++ .../data/tmp/pot_period29143.footer.html | 36 +++ .../data/tmp/pot_period29143.header.html | 31 ++ backoffice/data/tmp/pot_period29143.html | 71 +++++ .../data/tmp/pot_period29155.footer.html | 36 +++ .../data/tmp/pot_period29155.header.html | 31 ++ backoffice/data/tmp/pot_period29155.html | 71 +++++ .../data/tmp/pot_period29171.footer.html | 36 +++ .../data/tmp/pot_period29171.header.html | 31 ++ backoffice/data/tmp/pot_period29171.html | 71 +++++ .../data/tmp/pot_period29181.footer.html | 36 +++ .../data/tmp/pot_period29181.header.html | 31 ++ backoffice/data/tmp/pot_period29181.html | 71 +++++ .../data/tmp/pot_period29190.footer.html | 36 +++ .../data/tmp/pot_period29190.header.html | 31 ++ backoffice/data/tmp/pot_period29190.html | 71 +++++ .../data/tmp/pot_period29200.footer.html | 36 +++ .../data/tmp/pot_period29200.header.html | 31 ++ backoffice/data/tmp/pot_period29200.html | 71 +++++ .../data/tmp/pot_period29211.footer.html | 36 +++ .../data/tmp/pot_period29211.header.html | 31 ++ backoffice/data/tmp/pot_period29211.html | 71 +++++ .../data/tmp/pot_period29221.footer.html | 36 +++ .../data/tmp/pot_period29221.header.html | 31 ++ backoffice/data/tmp/pot_period29221.html | 71 +++++ backoffice/img/icons/expand.svg | 1 + backoffice/js/formsave.js | 2 +- backoffice/js/module_global.js | 4 +- backoffice/js/request.js | 2 +- backoffice/tmp/periods.html | 204 +++++++++++++ backoffice/tmp/rp.js | 263 ++++++++++++++++ .../periods => tmp}/staffreportperiod.js | 0 .../module/periods => tmp}/staffworkplan.js | 0 .../periods => tmp}/staffworkplan_daily.js | 0 backoffice/tmpl/block/dlgaction.tt | 4 +- backoffice/tmpl/block/dlgreport.tt | 2 +- backoffice/tmpl/macro/fields.tt | 2 +- backoffice/tmpl/module/companies/index.js | 2 +- backoffice/tmpl/module/companies/index.tt | 99 +++--- .../tmpl/module/companies/staffgroups.js | 4 +- backoffice/tmpl/module/periods/index.js | 7 +- backoffice/tmpl/module/periods/index.tt | 288 +++++------------- .../tmpl/module/periods/reportperiod.js | 196 ++---------- .../tmpl/module/periods/staffperiodweeks.js | 226 +++++++++++++- backoffice/tmpl/module/profile/index.js | 27 -- backoffice/tmpl/module/staff/index.js | 3 +- backoffice/tmpl/module/staff/index.tt | 10 +- backoffice/tmpl/module/staff/staff.js | 3 +- backoffice/tmpl/module/staff/staffcontract.js | 57 +--- backoffice/tmpl/module/timetrackers/index.js | 2 +- backoffice/tmpl/module/users/index.js | 2 +- backoffice/tmpl/module/workplans/index.js | 105 +------ backoffice/tmpl/skeleton/module.tt | 14 +- backoffice/vendors/choices/choices.min.css | 2 +- .../vendors/choices/choices.min.orig.css | 1 + .../vendors/flatpickr/flatpickr.min.css | 14 +- .../vendors/flatpickr/flatpickr.min.orig.css | 13 + .../vendors/flatpickr/themes/airbnb.min.css | 1 + 91 files changed, 3269 insertions(+), 751 deletions(-) create mode 100644 backoffice/css/w3pro.min.css create mode 100644 backoffice/data/output/pot/periode_20191230-20200223_pot_period.pdf create mode 100644 backoffice/data/tmp/pot_period26608.footer.html create mode 100644 backoffice/data/tmp/pot_period26608.header.html create mode 100644 backoffice/data/tmp/pot_period26608.html create mode 100644 backoffice/data/tmp/pot_period28641.footer.html create mode 100644 backoffice/data/tmp/pot_period28641.header.html create mode 100644 backoffice/data/tmp/pot_period28641.html create mode 100644 backoffice/data/tmp/pot_period28649.footer.html create mode 100644 backoffice/data/tmp/pot_period28649.header.html create mode 100644 backoffice/data/tmp/pot_period28649.html create mode 100644 backoffice/data/tmp/pot_period29062.footer.html create mode 100644 backoffice/data/tmp/pot_period29062.header.html create mode 100644 backoffice/data/tmp/pot_period29062.html create mode 100644 backoffice/data/tmp/pot_period29082.footer.html create mode 100644 backoffice/data/tmp/pot_period29082.header.html create mode 100644 backoffice/data/tmp/pot_period29082.html create mode 100644 backoffice/data/tmp/pot_period29092.footer.html create mode 100644 backoffice/data/tmp/pot_period29092.header.html create mode 100644 backoffice/data/tmp/pot_period29092.html create mode 100644 backoffice/data/tmp/pot_period29104.footer.html create mode 100644 backoffice/data/tmp/pot_period29104.header.html create mode 100644 backoffice/data/tmp/pot_period29104.html create mode 100644 backoffice/data/tmp/pot_period29123.html create mode 100644 backoffice/data/tmp/pot_period29127.html create mode 100644 backoffice/data/tmp/pot_period29134.footer.html create mode 100644 backoffice/data/tmp/pot_period29134.header.html create mode 100644 backoffice/data/tmp/pot_period29134.html create mode 100644 backoffice/data/tmp/pot_period29143.footer.html create mode 100644 backoffice/data/tmp/pot_period29143.header.html create mode 100644 backoffice/data/tmp/pot_period29143.html create mode 100644 backoffice/data/tmp/pot_period29155.footer.html create mode 100644 backoffice/data/tmp/pot_period29155.header.html create mode 100644 backoffice/data/tmp/pot_period29155.html create mode 100644 backoffice/data/tmp/pot_period29171.footer.html create mode 100644 backoffice/data/tmp/pot_period29171.header.html create mode 100644 backoffice/data/tmp/pot_period29171.html create mode 100644 backoffice/data/tmp/pot_period29181.footer.html create mode 100644 backoffice/data/tmp/pot_period29181.header.html create mode 100644 backoffice/data/tmp/pot_period29181.html create mode 100644 backoffice/data/tmp/pot_period29190.footer.html create mode 100644 backoffice/data/tmp/pot_period29190.header.html create mode 100644 backoffice/data/tmp/pot_period29190.html create mode 100644 backoffice/data/tmp/pot_period29200.footer.html create mode 100644 backoffice/data/tmp/pot_period29200.header.html create mode 100644 backoffice/data/tmp/pot_period29200.html create mode 100644 backoffice/data/tmp/pot_period29211.footer.html create mode 100644 backoffice/data/tmp/pot_period29211.header.html create mode 100644 backoffice/data/tmp/pot_period29211.html create mode 100644 backoffice/data/tmp/pot_period29221.footer.html create mode 100644 backoffice/data/tmp/pot_period29221.header.html create mode 100644 backoffice/data/tmp/pot_period29221.html create mode 100644 backoffice/img/icons/expand.svg create mode 100644 backoffice/tmp/periods.html create mode 100644 backoffice/tmp/rp.js rename backoffice/{tmpl/module/periods => tmp}/staffreportperiod.js (100%) rename backoffice/{tmpl/module/periods => tmp}/staffworkplan.js (100%) rename backoffice/{tmpl/module/periods => tmp}/staffworkplan_daily.js (100%) create mode 100644 backoffice/vendors/choices/choices.min.orig.css create mode 100644 backoffice/vendors/flatpickr/flatpickr.min.orig.css create mode 100644 backoffice/vendors/flatpickr/themes/airbnb.min.css diff --git a/backoffice/api/index.cgi b/backoffice/api/index.cgi index 74b8b6e4..3a4b70d1 100755 --- a/backoffice/api/index.cgi +++ b/backoffice/api/index.cgi @@ -8,7 +8,7 @@ use CGI::Cookie; use File::Basename; use Business::Tax::VAT::Validation; use JSON::PP; - +use Data::Dumper; use dksconfig qw/$sitecfg/; use dksdb; @@ -31,7 +31,7 @@ if ($sess == undef){ print JSON::PP::encode_json($html); exit(0); } -$html->{p} = $p; +#$html->{p} = $p; # $html->{sess} =$sess; #my $datapath = $ENV{"DOCUMENT_ROOT"}.dirname(dirname($scriptpath)).'/data/'; if (($cgi->request_method() eq "GET") || ($cgi->request_method() eq "POST")){ @@ -74,7 +74,7 @@ if (($cgi->request_method() eq "GET") || ($cgi->request_method() eq "POST")){ # } if ($p->{fn} eq "saveform"){ - $html->{p} = $p; + #$html->{p} = $p; $html->{result}->{ident} = $p->{ident}; #my $fn = $p->{fn}; delete $p->{ident}; @@ -96,7 +96,8 @@ if (($cgi->request_method() eq "GET") || ($cgi->request_method() eq "POST")){ else { @sql = $db->create_ddl_update($p); } - $html->{sql} = \@sql; + #print Dumper(@sql); + #$html->{sql} = \@sql; foreach my $s (@sql){ #if ($type eq "ins"){ $retid= $db->dbquerysorted($s); diff --git a/backoffice/api/lib/pdfreport.pm b/backoffice/api/lib/pdfreport.pm index e2e1ee3f..781e1e54 100644 --- a/backoffice/api/lib/pdfreport.pm +++ b/backoffice/api/lib/pdfreport.pm @@ -5,6 +5,10 @@ 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; @@ -25,19 +29,21 @@ sub createpdf(){ my $output = shift; my $inputdata = shift; my $r = -1; - print $self->{tmplpath}.'/'.$template.'.conf'."\n"; + #print $self->{tmplpath}.'/'.$template.'.conf'."\n"; if (-e $self->{tmplpath}.'/'.$template.'.conf'){ $self->readpdfconfig($template,$inputdata); - print Dumper($self->{template}); + #print Dumper($self->{template}); } - print Dumper($self->{pdf}); - print Dumper($self->{template}); + #print "PDF:".Dumper($self->{pdf}); + #print "TMPL:".Dumper($self->{template}); + #print "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}; } - if ((keys(%{$self}) > 0) && (-e $tmpreportpath.'/'.$template.'.html')){ + #print $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}; } @@ -54,7 +60,7 @@ sub createpdf(){ } $cmd .= ' "'.$tmpreportpath.'/'.$template.'.html"'; $cmd .= ' "'.$output.'"'; - print $cmd."\n"; + #print $cmd."\n"; $r = system($cmd); } if (-e $output){ @@ -79,6 +85,7 @@ sub createTTReport(){ if (-d $self->{tmplpath}.'/'.$template){ dircopy($self->{tmplpath}.'/'.$template,$self->{tmp}.'/'.$template); } + return $template.$$; } @@ -86,6 +93,10 @@ 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'} } @@ -97,7 +108,7 @@ sub readpdfconfig(){ open(CFG,$self->{tmplpath}.'/'.$template.'.conf'); while (my $l = ){ chomp($l); - print $l."\n"; + #print $l."\n"; $l =~ s/^\s+//; if (($l =~ /^#/) || ($l eq "")) {next;} if ($l =~ /\w+=.+/){ diff --git a/backoffice/api/report.cgi b/backoffice/api/report.cgi index 4808756f..592fb050 100644 --- a/backoffice/api/report.cgi +++ b/backoffice/api/report.cgi @@ -82,17 +82,18 @@ if (($cgi->request_method() eq "GET") || ($cgi->request_method() eq "POST")){ } elsif (exists($p->{generate})){ print $cgi->header(-type=>"application/json", -charset => "utf-8"); - print Dumper($p->{data}); + #print Dumper($p->{data}); my $data = JSON::PP::decode_json($p->{data}); my $reportpath =$sitecfg->{docroot}.$sitecfg->{apidatapath}.'reports/'.dirname($p->{generate}); my $tmppath = $sitecfg->{docroot}.$sitecfg->{apidatapath}.'tmp/'; my $output = $sitecfg->{docroot}.$sitecfg->{apidatapath}.'output/'; - print $reportpath."\n".$tmppath."\n".$output."\n".$output.dirname($p->{generate})."\n"; + #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 "OUTPUT:".$output."\n"; my $rep = pdfreport->new({tmplpath => $reportpath, tmp => $tmppath}); - my ($result,$file) = $rep->createpdf(basename($p->{generate}),$output.$p->{file},$data); + my ($result,$file) = $rep->createpdf(basename($p->{generate}),$output.dirname($p->{generate}).'/'.$p->{file},$data); $html->{result}->{file} = dirname($p->{generate}).'/'.basename($file); } elsif (exists($p->{open})){ diff --git a/backoffice/css/w3pro.min.css b/backoffice/css/w3pro.min.css new file mode 100644 index 00000000..51c2a085 --- /dev/null +++ b/backoffice/css/w3pro.min.css @@ -0,0 +1 @@ +html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section{display:block}summary{display:list-item}audio,canvas,progress,video{display:inline-block}progress{vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}dfn{font-style:italic}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}figure{margin:1em 40px}img{border-style:none}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}hr{box-sizing:content-box;height:0;overflow:visible}button,input,optgroup,select,textarea{font:inherit;margin:0}optgroup{font-weight:700}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{color:inherit;display:table;max-width:100%;padding:0;white-space:normal}textarea{overflow:auto}[type=checkbox],[type=radio]{padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}body,html{font-family:Verdana,sans-serif;font-size:15px;line-height:1.5}html{overflow-x:hidden}h1{font-size:36px}h2{font-size:30px}h3{font-size:24px}h4{font-size:20px}h5{font-size:18px}h6{font-size:16px}.w3-serif{font-family:serif}h1,h2,h3,h4,h5,h6{font-family:"Segoe UI",Arial,sans-serif;font-weight:400;margin:0}.w3-wide{letter-spacing:4px}hr{border:0;border-top:1px solid #eee;margin:20px 0}.w3-btn-append-right{float:left;margin-right:0}.w3-image{max-width:100%;height:auto}img{vertical-align:middle}a{color:inherit}.w3-table,.w3-table-all{border-collapse:collapse;border-spacing:0;width:100%;display:table}.w3-table-all{border:1px solid #ccc}.w3-bordered tr,.w3-table-all tr{border-bottom:1px solid #ddd}.w3-striped tbody tr:nth-child(even){background-color:#f1f1f1}.w3-table-all tr:nth-child(odd){background-color:#fff}.w3-table-all tr:nth-child(even){background-color:#f1f1f1}.w3-hoverable tbody tr:hover,.w3-ul.w3-hoverable li:hover{background-color:#ccc}.w3-centered tr td,.w3-centered tr th{text-align:center}.w3-table td,.w3-table th,.w3-table-all td,.w3-table-all th{padding:8px 8px;display:table-cell;text-align:left;vertical-align:top}.w3-table td:first-child,.w3-table th:first-child,.w3-table-all td:first-child,.w3-table-all th:first-child{padding-left:16px}.w3-btn,.w3-button{border:none;display:inline-block;padding:8px 16px;vertical-align:middle;overflow:hidden;text-decoration:none;color:inherit;background-color:inherit;text-align:center;cursor:pointer;white-space:nowrap}.w3-btn:hover{box-shadow:0 8px 16px 0 rgba(0,0,0,.2),0 6px 20px 0 rgba(0,0,0,.19)}.w3-btn,.w3-button{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.w3-btn:disabled,.w3-button:disabled,.w3-disabled{cursor:not-allowed;opacity:.3}.w3-disabled *,:disabled *{pointer-events:none}.w3-btn.w3-disabled:hover,.w3-btn:disabled:hover{box-shadow:none}.w3-badge,.w3-tag{background-color:#000;color:#fff;display:inline-block;padding-left:8px;padding-right:8px;text-align:center}.w3-badge{border-radius:50%}.w3-ul{list-style-type:none;padding:0;margin:0}.w3-ul li{padding:8px 16px;border-bottom:1px solid #ddd}.w3-ul li:last-child{border-bottom:none}.w3-display-container,.w3-tooltip{position:relative}.w3-tooltip .w3-text{display:none}.w3-tooltip:hover .w3-text{display:inline-block}.w3-ripple:active{opacity:.5}.w3-ripple{transition:opacity 0s}.w3-input{padding:4px;display:block;border:1px solid #ccc;width:100%;background-color:#e8f0fe}.w3-input-append{padding:4px;display:block;border:1px solid #ccc;float:left;background-color:#e8f0fe}.w3-select{padding:4px 0;display:block;width:100%;border:1px solid #ccc;background-color:#e8f0fe}.w3-dropdown-click,.w3-dropdown-hover{position:relative;display:inline-block;cursor:pointer}.w3-dropdown-hover:hover .w3-dropdown-content{display:block}.w3-dropdown-click:hover,.w3-dropdown-hover:first-child{background-color:#ccc;color:#000}.w3-dropdown-click:hover>.w3-button:first-child,.w3-dropdown-hover:hover>.w3-button:first-child{background-color:#ccc;color:#000}.w3-dropdown-content{cursor:auto;color:#000;background-color:#fff;display:none;position:absolute;min-width:160px;margin:0;padding:0;z-index:1}.w3-check,.w3-radio{width:24px;height:24px;position:relative;top:6px}.w3-sidebar{height:100%;width:200px;background-color:#fff;position:fixed!important;z-index:1;overflow:auto}.w3-bar-block .w3-dropdown-click,.w3-bar-block .w3-dropdown-hover{width:100%}.w3-bar-block .w3-dropdown-click .w3-dropdown-content,.w3-bar-block .w3-dropdown-hover .w3-dropdown-content{min-width:100%}.w3-bar-block .w3-dropdown-click .w3-button,.w3-bar-block .w3-dropdown-hover .w3-button{width:100%;text-align:left;padding:8px 16px}#main,.w3-main{transition:margin-left .4s}.w3-modal{z-index:3;display:none;padding-top:100px;position:fixed;left:0;top:0;width:100%;height:100%;overflow:auto;background-color:#000;background-color:rgba(0,0,0,.4)}.w3-modal-content{margin:auto;background-color:#fff;position:relative;padding:0;outline:0;width:600px}.w3-bar{width:100%;overflow:hidden}.w3-center .w3-bar{display:inline-block;width:auto}.w3-bar .w3-bar-item{padding:8px 16px;float:left;width:auto;border:none;display:block;outline:0}.w3-bar .w3-dropdown-click,.w3-bar .w3-dropdown-hover{position:static;float:left}.w3-bar .w3-button{white-space:normal}.w3-bar-block .w3-bar-item{width:100%;display:block;padding:8px 16px;text-align:left;border:none;white-space:normal;float:none;outline:0}.w3-bar-block.w3-center .w3-bar-item{text-align:center}.w3-block{display:block;width:100%}.w3-responsive{display:block;overflow-x:auto}.w3-bar:after,.w3-bar:before,.w3-cell-row:after,.w3-cell-row:before,.w3-clear:after,.w3-clear:before,.w3-container:after,.w3-container:before,.w3-panel:after,.w3-panel:before,.w3-row-padding:after,.w3-row-padding:before,.w3-row:after,.w3-row:before{content:"";display:table;clear:both}.w3-col,.w3-fifth,.w3-fourfifth,.w3-half,.w3-quarter,.w3-third,.w3-threefifth,.w3-threequarter,.w3-twofifth,.w3-twothird{float:left;width:100%}.w3-col.s1{width:8.33333%}.w3-col.s2{width:16.66666%}.w3-col.s3{width:24.99999%}.w3-col.s4{width:33.33333%}.w3-col.s5{width:41.66666%}.w3-col.s6{width:49.99999%}.w3-col.s7{width:58.33333%}.w3-col.s8{width:66.66666%}.w3-col.s9{width:74.99999%}.w3-col.s10{width:83.33333%}.w3-col.s11{width:91.66666%}.w3-col.s12{width:99.99999%}@media (min-width:601px){.w3-col.m1{width:8.33333%}.w3-col.m2{width:16.66666%}.w3-col.m3,.w3-quarter{width:24.99999%}.w3-col.m4,.w3-third{width:33.33333%}.w3-fifth{width:20%;min-width:100px}.w3-col.m5{width:41.66666%}.w3-col.m6,.w3-half{width:49.99999%}.w3-col.m7{width:58.33333%}.w3-col.m8,.w3-twothird{width:66.66666%}.w3-col.m9,.w3-threequarter{width:74.99999%}.w3-col.m10{width:83.33333%}.w3-col.m11{width:91.66666%}.w3-col.m12{width:99.99999%}.w3-twofifth{width:40%}.w3-threefifth{width:60%}.w3-fourfifth{width:80%}}@media (min-width:993px){.w3-col.l1{width:8.33333%}.w3-col.l2{width:16.66666%}.w3-col.l3{width:24.99999%}.w3-col.l4{width:33.33333%}.w3-col.l5{width:41.66666%}.w3-col.l6{width:49.99999%}.w3-col.l7{width:58.33333%}.w3-col.l8{width:66.66666%}.w3-col.l9{width:74.99999%}.w3-col.l10{width:83.33333%}.w3-col.l11{width:91.66666%}.w3-col.l12{width:99.99999%}}.w3-rest{overflow:hidden}.w3-stretch{margin-left:-16px;margin-right:-16px}.w3-auto,.w3-content{margin-left:auto;margin-right:auto}.w3-content{max-width:980px}.w3-auto{max-width:1140px}.w3-cell-row{display:table;width:100%}.w3-cell{display:table-cell}.w3-cell-top{vertical-align:top}.w3-cell-middle{vertical-align:middle}.w3-cell-bottom{vertical-align:bottom}.w3-hide{display:none!important}.w3-show,.w3-show-block{display:block!important}.w3-show-inline-block{display:inline-block!important}@media (max-width:1205px){.w3-auto{max-width:95%}}@media (max-width:600px){.w3-modal-content{margin:0 10px;width:auto!important}.w3-modal{padding-top:30px}.w3-dropdown-click.w3-mobile .w3-dropdown-content,.w3-dropdown-hover.w3-mobile .w3-dropdown-content{position:relative}.w3-hide-small{display:none!important}.w3-mobile{display:block;width:100%!important}.w3-bar-item.w3-mobile,.w3-dropdown-click.w3-mobile,.w3-dropdown-hover.w3-mobile{text-align:center}.w3-dropdown-click.w3-mobile,.w3-dropdown-click.w3-mobile .w3-btn,.w3-dropdown-click.w3-mobile .w3-button,.w3-dropdown-hover.w3-mobile,.w3-dropdown-hover.w3-mobile .w3-btn,.w3-dropdown-hover.w3-mobile .w3-button{width:100%}}@media (max-width:768px){.w3-modal-content{width:500px}.w3-modal{padding-top:50px}}@media (min-width:993px){.w3-modal-content{width:900px}.w3-hide-large{display:none!important}.w3-sidebar.w3-collapse{display:block!important}}@media (max-width:992px) and (min-width:601px){.w3-hide-medium{display:none!important}}@media (max-width:992px){.w3-sidebar.w3-collapse{display:none}.w3-main{margin-left:0!important;margin-right:0!important}.w3-auto{max-width:100%}}.w3-bottom,.w3-top{position:fixed;width:100%;z-index:1}.w3-top{top:0}.w3-bottom{bottom:0}.w3-overlay{position:fixed;display:none;width:100%;height:100%;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,.5);z-index:2}.w3-display-topleft{position:absolute;left:0;top:0}.w3-display-topright{position:absolute;right:0;top:0}.w3-display-bottomleft{position:absolute;left:0;bottom:0}.w3-display-bottomright{position:absolute;right:0;bottom:0}.w3-display-middle{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%)}.w3-display-left{position:absolute;top:50%;left:0;transform:translate(0,-50%);-ms-transform:translate(0,-50%)}.w3-display-right{position:absolute;top:50%;right:0;transform:translate(0,-50%);-ms-transform:translate(0,-50%)}.w3-display-topmiddle{position:absolute;left:50%;top:0;transform:translate(-50%,0);-ms-transform:translate(-50%,0)}.w3-display-bottommiddle{position:absolute;left:50%;bottom:0;transform:translate(-50%,0);-ms-transform:translate(-50%,0)}.w3-display-container:hover .w3-display-hover{display:block}.w3-display-container:hover span.w3-display-hover{display:inline-block}.w3-display-hover{display:none}.w3-display-position{position:absolute}.w3-circle{border-radius:50%}.w3-round-small{border-radius:2px}.w3-round,.w3-round-medium{border-radius:4px}.w3-round-large{border-radius:8px}.w3-round-xlarge{border-radius:16px}.w3-round-xxlarge{border-radius:32px}.w3-row-padding,.w3-row-padding>.w3-col,.w3-row-padding>.w3-half,.w3-row-padding>.w3-quarter,.w3-row-padding>.w3-third,.w3-row-padding>.w3-threequarter,.w3-row-padding>.w3-twothird{padding:0 8px}.w3-container,.w3-panel{padding:.01em 8px}.w3-panel{margin-top:8px;margin-bottom:8px}.w3-code,.w3-codespan{font-family:Consolas,"courier new";font-size:16px}.w3-code{width:auto;background-color:#fff;padding:8px 12px;border-left:4px solid #4caf50;word-wrap:break-word}.w3-codespan{color:#dc143c;background-color:#f1f1f1;padding-left:4px;padding-right:4px;font-size:110%}.w3-card,.w3-card-2{box-shadow:0 2px 5px 0 rgba(0,0,0,.16)}.w3-card-4,.w3-hover-shadow:hover{box-shadow:0 4px 10px 0 rgba(0,0,0,.2),0 4px 20px 0 rgba(0,0,0,.19)}.w3-spin{animation:w3-spin 2s infinite linear}@keyframes w3-spin{0%{transform:rotate(0)}100%{transform:rotate(359deg)}}.w3-animate-fading{animation:fading 10s infinite}@keyframes fading{0%{opacity:0}50%{opacity:1}100%{opacity:0}}.w3-animate-opacity{animation:opac .8s}@keyframes opac{from{opacity:0}to{opacity:1}}.w3-animate-top{position:relative;animation:animatetop .4s}@keyframes animatetop{from{top:-300px;opacity:0}to{top:0;opacity:1}}.w3-animate-left{position:relative;animation:animateleft .4s}@keyframes animateleft{from{left:-300px;opacity:0}to{left:0;opacity:1}}.w3-animate-right{position:relative;animation:animateright .4s}@keyframes animateright{from{right:-300px;opacity:0}to{right:0;opacity:1}}.w3-animate-bottom{position:relative;animation:animatebottom .4s}@keyframes animatebottom{from{bottom:-300px;opacity:0}to{bottom:0;opacity:1}}.w3-animate-zoom{animation:animatezoom .6s}@keyframes animatezoom{from{transform:scale(0)}to{transform:scale(1)}}.w3-animate-input{transition:width .4s ease-in-out}.w3-animate-input:focus{width:100%!important}.w3-hover-opacity:hover,.w3-opacity{opacity:.6}.w3-hover-opacity-off:hover,.w3-opacity-off{opacity:1}.w3-opacity-max{opacity:.25}.w3-opacity-min{opacity:.75}.w3-grayscale-max,.w3-greyscale-max,.w3-hover-grayscale:hover,.w3-hover-greyscale:hover{filter:grayscale(100%)}.w3-grayscale,.w3-greyscale{filter:grayscale(75%)}.w3-grayscale-min,.w3-greyscale-min{filter:grayscale(50%)}.w3-sepia{filter:sepia(75%)}.w3-hover-sepia:hover,.w3-sepia-max{filter:sepia(100%)}.w3-sepia-min{filter:sepia(50%)}.w3-tiny{font-size:10px!important}.w3-small{font-size:12px!important}.w3-medium{font-size:15px!important}.w3-large{font-size:18px!important}.w3-xlarge{font-size:24px!important}.w3-xxlarge{font-size:36px!important}.w3-xxxlarge{font-size:48px!important}.w3-jumbo{font-size:64px!important}.w3-left-align{text-align:left!important}.w3-right-align{text-align:right!important}.w3-justify{text-align:justify!important}.w3-center{text-align:center!important}.w3-border-0{border:0!important}.w3-border{border:1px solid #ccc!important}.w3-border-top{border-top:1px solid #ccc!important}.w3-border-bottom{border-bottom:1px solid #ccc!important}.w3-border-left{border-left:1px solid #ccc!important}.w3-border-right{border-right:1px solid #ccc!important}.w3-topbar{border-top:6px solid #ccc!important}.w3-bottombar{border-bottom:6px solid #ccc!important}.w3-leftbar{border-left:6px solid #ccc!important}.w3-rightbar{border-right:6px solid #ccc!important}.w3-code,.w3-section{margin-top:2px!important;margin-bottom:16px!important}.w3-margin{margin:16px!important}.w3-margin-top{margin-top:16px!important}.w3-margin-bottom{margin-bottom:16px!important}.w3-margin-left{margin-left:16px!important}.w3-margin-right{margin-right:16px!important}.w3-padding-small{padding:4px 8px!important}.w3-padding{padding:8px 16px!important}.w3-padding-large{padding:12px 24px!important}.w3-padding-16{padding-top:16px!important;padding-bottom:16px!important}.w3-padding-24{padding-top:24px!important;padding-bottom:24px!important}.w3-padding-32{padding-top:32px!important;padding-bottom:32px!important}.w3-padding-48{padding-top:48px!important;padding-bottom:48px!important}.w3-padding-64{padding-top:64px!important;padding-bottom:64px!important}.w3-left{float:left!important}.w3-right{float:right!important}.w3-button:hover{color:#000!important;background-color:#ccc!important}.w3-hover-none:hover,.w3-transparent{background-color:transparent!important}.w3-hover-none:hover{box-shadow:none!important}.w3-amber,.w3-hover-amber:hover{color:#000!important;background-color:#ffc107!important}.w3-aqua,.w3-hover-aqua:hover{color:#000!important;background-color:#0ff!important}.w3-blue,.w3-hover-blue:hover{color:#fff!important;background-color:#2196f3!important}.w3-hover-light-blue:hover,.w3-light-blue{color:#000!important;background-color:#87ceeb!important}.w3-brown,.w3-hover-brown:hover{color:#fff!important;background-color:#795548!important}.w3-cyan,.w3-hover-cyan:hover{color:#000!important;background-color:#00bcd4!important}.w3-blue-grey,.w3-hover-blue-grey:hover{color:#fff!important;background-color:#607d8b!important}.w3-green,.w3-hover-green:hover{color:#fff!important;background-color:#4caf50!important}.w3-hover-light-green:hover,.w3-light-green{color:#000!important;background-color:#8bc34a!important}.w3-hover-indigo:hover,.w3-indigo{color:#fff!important;background-color:#3f51b5!important}.w3-hover-khaki:hover,.w3-khaki{color:#000!important;background-color:khaki!important}.w3-hover-lime:hover,.w3-lime{color:#000!important;background-color:#cddc39!important}.w3-hover-orange:hover,.w3-orange{color:#000!important;background-color:#ff9800!important}.w3-deep-orange,.w3-hover-deep-orange:hover{color:#fff!important;background-color:#ff5722!important}.w3-hover-pink:hover,.w3-pink{color:#fff!important;background-color:#e91e63!important}.w3-hover-purple:hover,.w3-purple{color:#fff!important;background-color:#9c27b0!important}.w3-deep-purple,.w3-hover-deep-purple:hover{color:#fff!important;background-color:#673ab7!important}.w3-hover-red:hover,.w3-red{color:#fff!important;background-color:#f44336!important}.w3-hover-sand:hover,.w3-sand{color:#000!important;background-color:#fdf5e6!important}.w3-hover-teal:hover,.w3-teal{color:#fff!important;background-color:#009688!important}.w3-hover-yellow:hover,.w3-yellow{color:#000!important;background-color:#ffeb3b!important}.w3-hover-white:hover,.w3-white{color:#000!important;background-color:#fff!important}.w3-black,.w3-hover-black:hover{color:#fff!important;background-color:#000!important}.w3-grey,.w3-hover-grey:hover{color:#000!important;background-color:#9e9e9e!important}.w3-hover-light-grey:hover,.w3-light-grey{color:#000!important;background-color:#f1f1f1!important}.w3-dark-grey,.w3-hover-dark-grey:hover{color:#fff!important;background-color:#616161!important}.w3-hover-pale-red:hover,.w3-pale-red{color:#000!important;background-color:#ffe7e7!important}.w3-hover-pale-green:hover,.w3-pale-green{color:#000!important;background-color:#e7ffe7!important}.w3-hover-pale-yellow:hover,.w3-pale-yellow{color:#000!important;background-color:#ffffd7!important}.w3-hover-pale-blue:hover,.w3-pale-blue{color:#000!important;background-color:#e7ffff!important}.w3-text-align-right{text-align:right}.w3-hover-text-amber:hover,.w3-text-amber{color:#ffc107!important}.w3-hover-text-aqua:hover,.w3-text-aqua{color:#0ff!important}.w3-hover-text-blue:hover,.w3-text-blue{color:#2196f3!important}.w3-hover-text-light-blue:hover,.w3-text-light-blue{color:#87ceeb!important}.w3-hover-text-brown:hover,.w3-text-brown{color:#795548!important}.w3-hover-text-cyan:hover,.w3-text-cyan{color:#00bcd4!important}.w3-hover-text-blue-grey:hover,.w3-text-blue-grey{color:#607d8b!important}.w3-hover-text-green:hover,.w3-text-green{color:#4caf50!important}.w3-hover-text-light-green:hover,.w3-text-light-green{color:#8bc34a!important}.w3-hover-text-indigo:hover,.w3-text-indigo{color:#3f51b5!important}.w3-hover-text-khaki:hover,.w3-text-khaki{color:#b4aa50!important}.w3-hover-text-lime:hover,.w3-text-lime{color:#cddc39!important}.w3-hover-text-orange:hover,.w3-text-orange{color:#ff9800!important}.w3-hover-text-deep-orange:hover,.w3-text-deep-orange{color:#ff5722!important}.w3-hover-text-pink:hover,.w3-text-pink{color:#e91e63!important}.w3-hover-text-purple:hover,.w3-text-purple{color:#9c27b0!important}.w3-hover-text-deep-purple:hover,.w3-text-deep-purple{color:#673ab7!important}.w3-hover-text-red:hover,.w3-text-red{color:#f44336!important}.w3-hover-text-sand:hover,.w3-text-sand{color:#fdf5e6!important}.w3-hover-text-teal:hover,.w3-text-teal{color:#009688!important}.w3-hover-text-yellow:hover,.w3-text-yellow{color:#d2be0e!important}.w3-hover-text-white:hover,.w3-text-white{color:#fff!important}.w3-hover-text-black:hover,.w3-text-black{color:#000!important}.w3-hover-text-grey:hover,.w3-text-grey{color:#757575!important}.w3-hover-text-light-grey:hover,.w3-text-light-grey{color:#f1f1f1!important}.w3-hover-text-dark-grey:hover,.w3-text-dark-grey{color:#3a3a3a!important}.w3-border-amber,.w3-hover-border-amber:hover{border-color:#ffc107!important}.w3-border-aqua,.w3-hover-border-aqua:hover{border-color:#0ff!important}.w3-border-blue,.w3-hover-border-blue:hover{border-color:#2196f3!important}.w3-border-light-blue,.w3-hover-border-light-blue:hover{border-color:#87ceeb!important}.w3-border-brown,.w3-hover-border-brown:hover{border-color:#795548!important}.w3-border-cyan,.w3-hover-border-cyan:hover{border-color:#00bcd4!important}.w3-border-blue-grey,.w3-hover-blue-grey:hover{border-color:#607d8b!important}.w3-border-green,.w3-hover-border-green:hover{border-color:#4caf50!important}.w3-border-light-green,.w3-hover-border-light-green:hover{border-color:#8bc34a!important}.w3-border-indigo,.w3-hover-border-indigo:hover{border-color:#3f51b5!important}.w3-border-khaki,.w3-hover-border-khaki:hover{border-color:khaki!important}.w3-border-lime,.w3-hover-border-lime:hover{border-color:#cddc39!important}.w3-border-orange,.w3-hover-border-orange:hover{border-color:#ff9800!important}.w3-border-deep-orange,.w3-hover-border-deep-orange:hover{border-color:#ff5722!important}.w3-border-pink,.w3-hover-border-pink:hover{border-color:#e91e63!important}.w3-border-purple,.w3-hover-border-purple:hover{border-color:#9c27b0!important}.w3-border-deep-purple,.w3-hover-border-deep-purple:hover{border-color:#673ab7!important}.w3-border-red,.w3-hover-border-red:hover{border-color:#f44336!important}.w3-border-sand,.w3-hover-border-sand:hover{border-color:#fdf5e6!important}.w3-border-teal,.w3-hover-border-teal:hover{border-color:#009688!important}.w3-border-yellow,.w3-hover-border-yellow:hover{border-color:#ffeb3b!important}.w3-border-white,.w3-hover-border-white:hover{border-color:#fff!important}.w3-border-black,.w3-hover-border-black:hover{border-color:#000!important}.w3-border-grey,.w3-hover-border-grey:hover{border-color:#9e9e9e!important}.w3-border-light-grey,.w3-hover-border-light-grey:hover{border-color:#f1f1f1!important}.w3-border-dark-grey,.w3-hover-border-dark-grey:hover{border-color:#616161!important}.w3-border-pale-red,.w3-hover-border-pale-red:hover{border-color:#ffe7e7!important}.w3-border-pale-green,.w3-hover-border-pale-green:hover{border-color:#e7ffe7!important}.w3-border-pale-yellow,.w3-hover-border-pale-yellow:hover{border-color:#ffffd7!important}.w3-border-pale-blue,.w3-hover-border-pale-blue:hover{border-color:#e7ffff!important}.w3-theme-l5{color:#000!important;background-color:#f6f8fc!important}.w3-theme-l4{color:#000!important;background-color:#e1e9f6!important}.w3-theme-l3{color:#000!important;background-color:#c3d3ed!important}.w3-theme-l2{color:#000!important;background-color:#a5bee4!important}.w3-theme-l1{color:#fff!important;background-color:#88a8db!important}.w3-theme-d1{color:#fff!important;background-color:#5180cb!important}.w3-theme-d2{color:#fff!important;background-color:#3a6fc3!important}.w3-theme-d3{color:#fff!important;background-color:#3361aa!important}.w3-theme-d4{color:#fff!important;background-color:#2c5392!important}.w3-theme-d5{color:#fff!important;background-color:#24457a!important}.w3-theme-light{color:#000!important;background-color:#f6f8fc!important}.w3-theme-dark{color:#fff!important;background-color:#24457a!important}.w3-theme-action{color:#fff!important;background-color:#24457a!important}.w3-theme{color:#fff!important;background-color:#6a92d3!important}.w3-text-theme{color:#6a92d3!important}.w3-border-theme{border-color:#6a92d3!important}.w3-hover-theme:hover{color:#fff!important;background-color:#6a92d3!important}.w3-hover-text-theme:hover{color:#6a92d3!important}.w3-hover-border-theme:hover{border-color:#6a92d3!important}.w3-label{color:#999696}@media (max-width:768px){#sidebar{display:none}#main{margin-left:0}}.w3-select{display:block;font-size:16px;font-family:sans-serif;font-weight:400;color:#444;line-height:1.3;padding:.6em 1.4em .5em .8em;width:100%;max-width:100%;box-sizing:border-box;margin:0;border-bottom:1px solid #aaa;box-shadow:0 1px 0 1px rgba(0,0,0,.04);-moz-appearance:none;-webkit-appearance:none;appearance:none;background-color:#e8f0fe;background-image:url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22292.4%22%20height%3D%22292.4%22%3E%3Cpath%20fill%3D%22%23000%22%20d%3D%22M287%2069.4a17.6%2017.6%200%200%200-13-5.4H18.4c-5%200-9.3%201.8-12.9%205.4A17.6%2017.6%200%200%200%200%2082.2c0%205%201.8%209.3%205.4%2012.9l128%20127.9c3.6%203.6%207.8%205.4%2012.8%205.4s9.2-1.8%2012.8-5.4L287%2095c3.5-3.5%205.4-7.8%205.4-12.8%200-5-1.9-9.2-5.5-12.8z%22%2F%3E%3C%2Fsvg%3E'),linear-gradient(to bottom,#e8f0fe 0,#e8f0fe 100%);background-repeat:no-repeat,repeat;background-position:right .7em top 50%,0 0;background-size:.65em auto,100%}.w3-select::-ms-expand{display:none}.w3-select:hover{border-color:#888}.w3-select:focus{border-color:#aaa;box-shadow:0 0 1px 1px #6a92d3;box-shadow:0 0 0 1px -moz-mac-focusring;color:#222;outline:0}.w3-select option{font-weight:400}.w3-table{table-layout:fixed}.w3-text-line-through{text-decoration:line-through}#snackbar{visibility:hidden;min-width:250px;margin-left:-125px;background-color:#333;color:#fff;text-align:center;padding:16px;position:fixed;z-index:1;left:50%;bottom:30px;font-size:17px}#snackbar.show{visibility:visible;-webkit-animation:fadein .5s,fadeout .5s 2.5s;animation:fadein .5s,fadeout .5s 2.5s}@-webkit-keyframes fadein{from{bottom:0;opacity:0}to{bottom:30px;opacity:1}}@keyframes fadein{from{bottom:0;opacity:0}to{bottom:30px;opacity:1}}@-webkit-keyframes fadeout{from{bottom:30px;opacity:1}to{bottom:0;opacity:0}}@keyframes fadeout{from{bottom:30px;opacity:1}to{bottom:0;opacity:0}}.tabulator-header-filter>input{background-color:#e8f0fe;border:1px solid #ccc;font-weight:400}.w3-readonly{pointer-events:none;display:block;border:0;width:100%;background-color:#fff}.right-side-bg{background:url(../img/bg1.jpg);background-size:cover;min-height:100vh} \ No newline at end of file diff --git a/backoffice/data/output/pot/periode_20191230-20200223_pot_period.pdf b/backoffice/data/output/pot/periode_20191230-20200223_pot_period.pdf new file mode 100644 index 0000000000000000000000000000000000000000..548398e0ac597b367f196b6614a65f5c13f31690 GIT binary patch literal 17684 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 literal 0 HcmV?d00001 diff --git a/backoffice/data/reports/pot/pot_period.footer.tt b/backoffice/data/reports/pot/pot_period.footer.tt index 0f199531..8a5797b9 100644 --- a/backoffice/data/reports/pot/pot_period.footer.tt +++ b/backoffice/data/reports/pot/pot_period.footer.tt @@ -25,12 +25,11 @@ function subst() { - +
SAFFRAN IT Consulting s.à r.l. ist eine Handelsbezeichnung von
DKS, Société à responsabilité limitée, RC B168572 - TVA: LU 2537 5617 - No. Aut: 10024550 / 0
- IBAN: LU25 0020 1100 2783 8700; BIC: BILLLULL
 
- Seite / + Page /
diff --git a/backoffice/data/reports/pot/pot_period.header.tt b/backoffice/data/reports/pot/pot_period.header.tt index 8e403506..24671e83 100644 --- a/backoffice/data/reports/pot/pot_period.header.tt +++ b/backoffice/data/reports/pot/pot_period.header.tt @@ -1,17 +1,28 @@ +[% 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() %] - + diff --git a/backoffice/data/reports/pot/pot_period.tt b/backoffice/data/reports/pot/pot_period.tt index 93f96d04..53eefac8 100644 --- a/backoffice/data/reports/pot/pot_period.tt +++ b/backoffice/data/reports/pot/pot_period.tt @@ -59,68 +59,13 @@ th.footer { - [% qginv = dksdb.prepare("select * from vw_invoiceoutlist WHERE id= ?") %] - [% ginv = qginv.execute(id_invoice) %] - [% inv = ginv.get_all() %] -
+

Plan d'Organisation du Travail

+

du [% rep.0.startdate %] au [% rep.0.enddate %]

+
- SAFFRAN IT Consulting S.à r.l.
- 4, rue Principale
- L-3770 Tétange

- Tel: +352 691 504 574
- info@saffran.lu / www.saffran.lu
+ [% cmp.0.company %] [% cmp.0.socialtype %]
+ [% cmp.0.address %]
+ [% cmp.0.zip %] [% cmp.0.city%]

+
+ TVA: [% comp.0.vatnumber %]
- - - - - - - - - -
Rechnung
- [% inv.0.receipient %]
[% inv.0.address %]
[% inv.0.zip %] [% inv.0.city %]
[% inv.0.country %]
-
- - - - - -
Rechnungs-Nr.[% inv.0.reference %]
Datum[% inv.0.invoicedate %]
Fälligkeit[% inv.0.deadlinedate %]
Kundennummer[% inv.0.ident %]
-
- [% qbookings = dksdb.prepare("SELECT id, id_invoice, quantity, unit, description, unitamount, netamount, taxamount, taxpercent, totalamount FROM vw_bookingoutlist where id_invoice= ?;") %] - - +
- - - - - - + - [% FOREACH book = qbookings.execute(id_invoice) %] - - - - - - - - [% END %] - + - - - - - - - - - - -
Produkt / DienstleistungAnz.Einzel-PreisNetto-Summe
[% book.description %][% book.quantity %][% book.unit %][% book.unitamount %] €[% book.netamount %] €
Total Netto - [% inv.0.totalnet %] €
MwSt. (17%) - [% inv.0.totalvat %] €
Gesamt zu bezahlen: - [% inv.0.totalgross %] €
-
Nous vous prions de virer le montant ci-dessus au compte
- LU25 0020 1100 2783 8700 (BILLLULL)
\ No newline at end of file diff --git a/backoffice/data/tmp/pot_period26608.footer.html b/backoffice/data/tmp/pot_period26608.footer.html new file mode 100644 index 00000000..129f926e --- /dev/null +++ b/backoffice/data/tmp/pot_period26608.footer.html @@ -0,0 +1,36 @@ + + + + + + + + + + + + +
+ Page / +
+ \ No newline at end of file diff --git a/backoffice/data/tmp/pot_period26608.header.html b/backoffice/data/tmp/pot_period26608.header.html new file mode 100644 index 00000000..e12e8bab --- /dev/null +++ b/backoffice/data/tmp/pot_period26608.header.html @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + +
+ Plan d'Organisation du Travail
+ du DD.MM.YYYY au DD.MM.YYYY +
+
+
+
+

+
+ TVA:
+
+
+ diff --git a/backoffice/data/tmp/pot_period26608.html b/backoffice/data/tmp/pot_period26608.html new file mode 100644 index 00000000..b8d46dd7 --- /dev/null +++ b/backoffice/data/tmp/pot_period26608.html @@ -0,0 +1,71 @@ + + + + + + Invoice + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/backoffice/data/tmp/pot_period28641.footer.html b/backoffice/data/tmp/pot_period28641.footer.html new file mode 100644 index 00000000..129f926e --- /dev/null +++ b/backoffice/data/tmp/pot_period28641.footer.html @@ -0,0 +1,36 @@ + + + + + + + + + + + + +
+ Page / +
+ \ No newline at end of file diff --git a/backoffice/data/tmp/pot_period28641.header.html b/backoffice/data/tmp/pot_period28641.header.html new file mode 100644 index 00000000..e12e8bab --- /dev/null +++ b/backoffice/data/tmp/pot_period28641.header.html @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + +
+ Plan d'Organisation du Travail
+ du DD.MM.YYYY au DD.MM.YYYY +
+
+
+
+

+
+ TVA:
+
+
+ diff --git a/backoffice/data/tmp/pot_period28641.html b/backoffice/data/tmp/pot_period28641.html new file mode 100644 index 00000000..b8d46dd7 --- /dev/null +++ b/backoffice/data/tmp/pot_period28641.html @@ -0,0 +1,71 @@ + + + + + + Invoice + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/backoffice/data/tmp/pot_period28649.footer.html b/backoffice/data/tmp/pot_period28649.footer.html new file mode 100644 index 00000000..129f926e --- /dev/null +++ b/backoffice/data/tmp/pot_period28649.footer.html @@ -0,0 +1,36 @@ + + + + + + + + + + + + +
+ Page / +
+ \ No newline at end of file diff --git a/backoffice/data/tmp/pot_period28649.header.html b/backoffice/data/tmp/pot_period28649.header.html new file mode 100644 index 00000000..e12e8bab --- /dev/null +++ b/backoffice/data/tmp/pot_period28649.header.html @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + +
+ Plan d'Organisation du Travail
+ du DD.MM.YYYY au DD.MM.YYYY +
+
+
+
+

+
+ TVA:
+
+
+ diff --git a/backoffice/data/tmp/pot_period28649.html b/backoffice/data/tmp/pot_period28649.html new file mode 100644 index 00000000..b8d46dd7 --- /dev/null +++ b/backoffice/data/tmp/pot_period28649.html @@ -0,0 +1,71 @@ + + + + + + Invoice + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/backoffice/data/tmp/pot_period29062.footer.html b/backoffice/data/tmp/pot_period29062.footer.html new file mode 100644 index 00000000..129f926e --- /dev/null +++ b/backoffice/data/tmp/pot_period29062.footer.html @@ -0,0 +1,36 @@ + + + + + + + + + + + + +
+ Page / +
+ \ No newline at end of file diff --git a/backoffice/data/tmp/pot_period29062.header.html b/backoffice/data/tmp/pot_period29062.header.html new file mode 100644 index 00000000..e12e8bab --- /dev/null +++ b/backoffice/data/tmp/pot_period29062.header.html @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + +
+ Plan d'Organisation du Travail
+ du DD.MM.YYYY au DD.MM.YYYY +
+
+
+
+

+
+ TVA:
+
+
+ diff --git a/backoffice/data/tmp/pot_period29062.html b/backoffice/data/tmp/pot_period29062.html new file mode 100644 index 00000000..b8d46dd7 --- /dev/null +++ b/backoffice/data/tmp/pot_period29062.html @@ -0,0 +1,71 @@ + + + + + + Invoice + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/backoffice/data/tmp/pot_period29082.footer.html b/backoffice/data/tmp/pot_period29082.footer.html new file mode 100644 index 00000000..129f926e --- /dev/null +++ b/backoffice/data/tmp/pot_period29082.footer.html @@ -0,0 +1,36 @@ + + + + + + + + + + + + +
+ Page / +
+ \ No newline at end of file diff --git a/backoffice/data/tmp/pot_period29082.header.html b/backoffice/data/tmp/pot_period29082.header.html new file mode 100644 index 00000000..e12e8bab --- /dev/null +++ b/backoffice/data/tmp/pot_period29082.header.html @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + +
+ Plan d'Organisation du Travail
+ du DD.MM.YYYY au DD.MM.YYYY +
+
+
+
+

+
+ TVA:
+
+
+ diff --git a/backoffice/data/tmp/pot_period29082.html b/backoffice/data/tmp/pot_period29082.html new file mode 100644 index 00000000..b8d46dd7 --- /dev/null +++ b/backoffice/data/tmp/pot_period29082.html @@ -0,0 +1,71 @@ + + + + + + Invoice + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/backoffice/data/tmp/pot_period29092.footer.html b/backoffice/data/tmp/pot_period29092.footer.html new file mode 100644 index 00000000..129f926e --- /dev/null +++ b/backoffice/data/tmp/pot_period29092.footer.html @@ -0,0 +1,36 @@ + + + + + + + + + + + + +
+ Page / +
+ \ No newline at end of file diff --git a/backoffice/data/tmp/pot_period29092.header.html b/backoffice/data/tmp/pot_period29092.header.html new file mode 100644 index 00000000..e12e8bab --- /dev/null +++ b/backoffice/data/tmp/pot_period29092.header.html @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + +
+ Plan d'Organisation du Travail
+ du DD.MM.YYYY au DD.MM.YYYY +
+
+
+
+

+
+ TVA:
+
+
+ diff --git a/backoffice/data/tmp/pot_period29092.html b/backoffice/data/tmp/pot_period29092.html new file mode 100644 index 00000000..b8d46dd7 --- /dev/null +++ b/backoffice/data/tmp/pot_period29092.html @@ -0,0 +1,71 @@ + + + + + + Invoice + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/backoffice/data/tmp/pot_period29104.footer.html b/backoffice/data/tmp/pot_period29104.footer.html new file mode 100644 index 00000000..129f926e --- /dev/null +++ b/backoffice/data/tmp/pot_period29104.footer.html @@ -0,0 +1,36 @@ + + + + + + + + + + + + +
+ Page / +
+ \ No newline at end of file diff --git a/backoffice/data/tmp/pot_period29104.header.html b/backoffice/data/tmp/pot_period29104.header.html new file mode 100644 index 00000000..479c790e --- /dev/null +++ b/backoffice/data/tmp/pot_period29104.header.html @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + +
+ Plan d'Organisation du Travail
+ du DD.MM.YYYY au DD.MM.YYYY +
+
+ Portanova s.à r.l.
+ rue de la faïencerie
+ Luxembourg

+
+ TVA:
+
+
+ diff --git a/backoffice/data/tmp/pot_period29104.html b/backoffice/data/tmp/pot_period29104.html new file mode 100644 index 00000000..b8d46dd7 --- /dev/null +++ b/backoffice/data/tmp/pot_period29104.html @@ -0,0 +1,71 @@ + + + + + + Invoice + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/backoffice/data/tmp/pot_period29123.html b/backoffice/data/tmp/pot_period29123.html new file mode 100644 index 00000000..b8d46dd7 --- /dev/null +++ b/backoffice/data/tmp/pot_period29123.html @@ -0,0 +1,71 @@ + + + + + + Invoice + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/backoffice/data/tmp/pot_period29127.html b/backoffice/data/tmp/pot_period29127.html new file mode 100644 index 00000000..b8d46dd7 --- /dev/null +++ b/backoffice/data/tmp/pot_period29127.html @@ -0,0 +1,71 @@ + + + + + + Invoice + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/backoffice/data/tmp/pot_period29134.footer.html b/backoffice/data/tmp/pot_period29134.footer.html new file mode 100644 index 00000000..129f926e --- /dev/null +++ b/backoffice/data/tmp/pot_period29134.footer.html @@ -0,0 +1,36 @@ + + + + + + + + + + + + +
+ Page / +
+ \ No newline at end of file diff --git a/backoffice/data/tmp/pot_period29134.header.html b/backoffice/data/tmp/pot_period29134.header.html new file mode 100644 index 00000000..dcac0a43 --- /dev/null +++ b/backoffice/data/tmp/pot_period29134.header.html @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + +
+

Plan d'Organisation du Travail

+

du 30.12.2019 au 23.02.2020

+
+
+ Portanova s.à r.l.
+ rue de la faïencerie
+ Luxembourg

+
+ TVA:
+
+
+ diff --git a/backoffice/data/tmp/pot_period29134.html b/backoffice/data/tmp/pot_period29134.html new file mode 100644 index 00000000..b8d46dd7 --- /dev/null +++ b/backoffice/data/tmp/pot_period29134.html @@ -0,0 +1,71 @@ + + + + + + Invoice + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/backoffice/data/tmp/pot_period29143.footer.html b/backoffice/data/tmp/pot_period29143.footer.html new file mode 100644 index 00000000..129f926e --- /dev/null +++ b/backoffice/data/tmp/pot_period29143.footer.html @@ -0,0 +1,36 @@ + + + + + + + + + + + + +
+ Page / +
+ \ No newline at end of file diff --git a/backoffice/data/tmp/pot_period29143.header.html b/backoffice/data/tmp/pot_period29143.header.html new file mode 100644 index 00000000..dcac0a43 --- /dev/null +++ b/backoffice/data/tmp/pot_period29143.header.html @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + +
+

Plan d'Organisation du Travail

+

du 30.12.2019 au 23.02.2020

+
+
+ Portanova s.à r.l.
+ rue de la faïencerie
+ Luxembourg

+
+ TVA:
+
+
+ diff --git a/backoffice/data/tmp/pot_period29143.html b/backoffice/data/tmp/pot_period29143.html new file mode 100644 index 00000000..b8d46dd7 --- /dev/null +++ b/backoffice/data/tmp/pot_period29143.html @@ -0,0 +1,71 @@ + + + + + + Invoice + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/backoffice/data/tmp/pot_period29155.footer.html b/backoffice/data/tmp/pot_period29155.footer.html new file mode 100644 index 00000000..8a5797b9 --- /dev/null +++ b/backoffice/data/tmp/pot_period29155.footer.html @@ -0,0 +1,36 @@ + + + + + + + + + + + + +
 
+ Page / +
+ \ No newline at end of file diff --git a/backoffice/data/tmp/pot_period29155.header.html b/backoffice/data/tmp/pot_period29155.header.html new file mode 100644 index 00000000..dcac0a43 --- /dev/null +++ b/backoffice/data/tmp/pot_period29155.header.html @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + +
+

Plan d'Organisation du Travail

+

du 30.12.2019 au 23.02.2020

+
+
+ Portanova s.à r.l.
+ rue de la faïencerie
+ Luxembourg

+
+ TVA:
+
+
+ diff --git a/backoffice/data/tmp/pot_period29155.html b/backoffice/data/tmp/pot_period29155.html new file mode 100644 index 00000000..b8d46dd7 --- /dev/null +++ b/backoffice/data/tmp/pot_period29155.html @@ -0,0 +1,71 @@ + + + + + + Invoice + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/backoffice/data/tmp/pot_period29171.footer.html b/backoffice/data/tmp/pot_period29171.footer.html new file mode 100644 index 00000000..8a5797b9 --- /dev/null +++ b/backoffice/data/tmp/pot_period29171.footer.html @@ -0,0 +1,36 @@ + + + + + + + + + + + + +
 
+ Page / +
+ \ No newline at end of file diff --git a/backoffice/data/tmp/pot_period29171.header.html b/backoffice/data/tmp/pot_period29171.header.html new file mode 100644 index 00000000..dcac0a43 --- /dev/null +++ b/backoffice/data/tmp/pot_period29171.header.html @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + +
+

Plan d'Organisation du Travail

+

du 30.12.2019 au 23.02.2020

+
+
+ Portanova s.à r.l.
+ rue de la faïencerie
+ Luxembourg

+
+ TVA:
+
+
+ diff --git a/backoffice/data/tmp/pot_period29171.html b/backoffice/data/tmp/pot_period29171.html new file mode 100644 index 00000000..b8d46dd7 --- /dev/null +++ b/backoffice/data/tmp/pot_period29171.html @@ -0,0 +1,71 @@ + + + + + + Invoice + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/backoffice/data/tmp/pot_period29181.footer.html b/backoffice/data/tmp/pot_period29181.footer.html new file mode 100644 index 00000000..8a5797b9 --- /dev/null +++ b/backoffice/data/tmp/pot_period29181.footer.html @@ -0,0 +1,36 @@ + + + + + + + + + + + + +
 
+ Page / +
+ \ No newline at end of file diff --git a/backoffice/data/tmp/pot_period29181.header.html b/backoffice/data/tmp/pot_period29181.header.html new file mode 100644 index 00000000..dcac0a43 --- /dev/null +++ b/backoffice/data/tmp/pot_period29181.header.html @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + +
+

Plan d'Organisation du Travail

+

du 30.12.2019 au 23.02.2020

+
+
+ Portanova s.à r.l.
+ rue de la faïencerie
+ Luxembourg

+
+ TVA:
+
+
+ diff --git a/backoffice/data/tmp/pot_period29181.html b/backoffice/data/tmp/pot_period29181.html new file mode 100644 index 00000000..b8d46dd7 --- /dev/null +++ b/backoffice/data/tmp/pot_period29181.html @@ -0,0 +1,71 @@ + + + + + + Invoice + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/backoffice/data/tmp/pot_period29190.footer.html b/backoffice/data/tmp/pot_period29190.footer.html new file mode 100644 index 00000000..8a5797b9 --- /dev/null +++ b/backoffice/data/tmp/pot_period29190.footer.html @@ -0,0 +1,36 @@ + + + + + + + + + + + + +
 
+ Page / +
+ \ No newline at end of file diff --git a/backoffice/data/tmp/pot_period29190.header.html b/backoffice/data/tmp/pot_period29190.header.html new file mode 100644 index 00000000..dcac0a43 --- /dev/null +++ b/backoffice/data/tmp/pot_period29190.header.html @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + +
+

Plan d'Organisation du Travail

+

du 30.12.2019 au 23.02.2020

+
+
+ Portanova s.à r.l.
+ rue de la faïencerie
+ Luxembourg

+
+ TVA:
+
+
+ diff --git a/backoffice/data/tmp/pot_period29190.html b/backoffice/data/tmp/pot_period29190.html new file mode 100644 index 00000000..b8d46dd7 --- /dev/null +++ b/backoffice/data/tmp/pot_period29190.html @@ -0,0 +1,71 @@ + + + + + + Invoice + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/backoffice/data/tmp/pot_period29200.footer.html b/backoffice/data/tmp/pot_period29200.footer.html new file mode 100644 index 00000000..8a5797b9 --- /dev/null +++ b/backoffice/data/tmp/pot_period29200.footer.html @@ -0,0 +1,36 @@ + + + + + + + + + + + + +
 
+ Page / +
+ \ No newline at end of file diff --git a/backoffice/data/tmp/pot_period29200.header.html b/backoffice/data/tmp/pot_period29200.header.html new file mode 100644 index 00000000..dcac0a43 --- /dev/null +++ b/backoffice/data/tmp/pot_period29200.header.html @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + +
+

Plan d'Organisation du Travail

+

du 30.12.2019 au 23.02.2020

+
+
+ Portanova s.à r.l.
+ rue de la faïencerie
+ Luxembourg

+
+ TVA:
+
+
+ diff --git a/backoffice/data/tmp/pot_period29200.html b/backoffice/data/tmp/pot_period29200.html new file mode 100644 index 00000000..b8d46dd7 --- /dev/null +++ b/backoffice/data/tmp/pot_period29200.html @@ -0,0 +1,71 @@ + + + + + + Invoice + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/backoffice/data/tmp/pot_period29211.footer.html b/backoffice/data/tmp/pot_period29211.footer.html new file mode 100644 index 00000000..8a5797b9 --- /dev/null +++ b/backoffice/data/tmp/pot_period29211.footer.html @@ -0,0 +1,36 @@ + + + + + + + + + + + + +
 
+ Page / +
+ \ No newline at end of file diff --git a/backoffice/data/tmp/pot_period29211.header.html b/backoffice/data/tmp/pot_period29211.header.html new file mode 100644 index 00000000..dcac0a43 --- /dev/null +++ b/backoffice/data/tmp/pot_period29211.header.html @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + +
+

Plan d'Organisation du Travail

+

du 30.12.2019 au 23.02.2020

+
+
+ Portanova s.à r.l.
+ rue de la faïencerie
+ Luxembourg

+
+ TVA:
+
+
+ diff --git a/backoffice/data/tmp/pot_period29211.html b/backoffice/data/tmp/pot_period29211.html new file mode 100644 index 00000000..b8d46dd7 --- /dev/null +++ b/backoffice/data/tmp/pot_period29211.html @@ -0,0 +1,71 @@ + + + + + + Invoice + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/backoffice/data/tmp/pot_period29221.footer.html b/backoffice/data/tmp/pot_period29221.footer.html new file mode 100644 index 00000000..8a5797b9 --- /dev/null +++ b/backoffice/data/tmp/pot_period29221.footer.html @@ -0,0 +1,36 @@ + + + + + + + + + + + + +
 
+ Page / +
+ \ No newline at end of file diff --git a/backoffice/data/tmp/pot_period29221.header.html b/backoffice/data/tmp/pot_period29221.header.html new file mode 100644 index 00000000..dcac0a43 --- /dev/null +++ b/backoffice/data/tmp/pot_period29221.header.html @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + +
+

Plan d'Organisation du Travail

+

du 30.12.2019 au 23.02.2020

+
+
+ Portanova s.à r.l.
+ rue de la faïencerie
+ Luxembourg

+
+ TVA:
+
+
+ diff --git a/backoffice/data/tmp/pot_period29221.html b/backoffice/data/tmp/pot_period29221.html new file mode 100644 index 00000000..b8d46dd7 --- /dev/null +++ b/backoffice/data/tmp/pot_period29221.html @@ -0,0 +1,71 @@ + + + + + + Invoice + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/backoffice/img/icons/expand.svg b/backoffice/img/icons/expand.svg new file mode 100644 index 00000000..d045be00 --- /dev/null +++ b/backoffice/img/icons/expand.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/backoffice/js/formsave.js b/backoffice/js/formsave.js index ceb52f2c..9e2e2149 100644 --- a/backoffice/js/formsave.js +++ b/backoffice/js/formsave.js @@ -310,7 +310,7 @@ function fillformbydataclass2(dataclass,choices,data){ function fillselectlist(obj,data,vidcol,vvalcol){ var sellist = []; - console.log(obj); + //console.log(obj); obj.clearStore(); if (data){ for (var i in data){ diff --git a/backoffice/js/module_global.js b/backoffice/js/module_global.js index b0fdf0d3..000f66b5 100644 --- a/backoffice/js/module_global.js +++ b/backoffice/js/module_global.js @@ -6,7 +6,7 @@ document.addEventListener("DOMContentLoaded", function() { var module = { viewpanel: function(pnlname){ - console.log(pnlname); + //console.log(pnlname); var panels = document.getElementsByClassName("panel"); var toolbars = document.getElementsByClassName("toolbar"); currentview = pnlname; @@ -17,7 +17,7 @@ var module = { toolbars[p].style.display = 'none'; } if (document.getElementById('pnl_' + pnlname)){ - console.log("View pnl_" + pnlname); + //console.log("View pnl_" + pnlname); document.getElementById('pnl_' + pnlname).style.display = 'block'; }else { alert('Panel pnl_' + pnlname + ' does not exist!'); diff --git a/backoffice/js/request.js b/backoffice/js/request.js index 782cf68a..a3085143 100644 --- a/backoffice/js/request.js +++ b/backoffice/js/request.js @@ -70,7 +70,7 @@ var req = { }else { rdata = data; } - console.log("Data to send: " + decodeURIComponent(rdata)); + //console.log("Data to send: " + decodeURIComponent(rdata)); var sendurl = api + url; if (method.toUpperCase() == 'GET'){ sendurl = sendurl + '?' + rdata; diff --git a/backoffice/tmp/periods.html b/backoffice/tmp/periods.html new file mode 100644 index 00000000..0e01c327 --- /dev/null +++ b/backoffice/tmp/periods.html @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/backoffice/tmp/rp.js b/backoffice/tmp/rp.js new file mode 100644 index 00000000..afaffd8b --- /dev/null +++ b/backoffice/tmp/rp.js @@ -0,0 +1,263 @@ +var reportperiod ={ + tbl: null, + selected: null, + name: "reportperiod", + choices:{}, + initform: function(){ + // flatpickr("#startdate",{altInput: true, + // altFormat: "d.m.Y", + // dateFormat: "Y-m-d", + // weekNumbers: true, + // // "disable": [ + // // function(date) { + // // // return true to disable + // // return (date.getDay() !== 1); + // // } + // // ], + // "locale": "fr", + // }); + // flatpickr("#enddate",{altInput: true, + // altFormat: "d.m.Y", + // dateFormat: "Y-m-d", + // weekNumbers: true, + // // "disable": [ + // // function(date) { + // // // return true to disable + // // return (date.getDay() !== 0); + // // } + // // ], + // "locale": "fr", + // }); + // reportperiod.choices["id_staffgroup"] = new Choices('#id_staffgroup',{ + // searchEnabled: false, + // itemSelectText: '', + // removeItemButton: false, + // choices : [] + // }); + // reportperiod.choices["periodtype"] = new Choices('#periodtype',{ + // searchEnabled: false, + // itemSelectText: '', + // removeItemButton: false, + // shouldSort: false, + // shouldSortItems: false, + // choices : [{"value":"week","label":"semaine(s)"},{"value":"month","label":"mois"}] + // }); + //reportperiod.getstaffgroups(); + //document.getElementById("periodtype").addEventListener('change', function(event){reportperiod.setenddate(event);}); + //document.getElementById("periodlength").addEventListener('change', function(event){reportperiod.setenddate(event);}); + //document.getElementById("startdate").addEventListener('change', function(event){reportperiod.setenddate(event);}); + }, + inittable: function(){ + reportperiod.tbl = new Tabulator("#tbl_" + reportperiod.name, { + headerFilterPlaceholder: "filter...", + height: "93vh", + layout: "fitDataFill",//fitDataFill + selectable: 1, + // persistence:{ + // sort: true, //persist column sorting + // filter: true, //persist filter sorting + // group: true, //persist row grouping + // columns: true, //persist columns + // }, + // rowClick:function(e, row){ + // //e - the click event object + // //row - row component + // //staffreportperiod.gettbldata(); + + // //row.toggleSelect(); //toggle row selected state on row click + // }, + rowContext:function(e, row){e.preventDefault();}, + // rowFormatter:function(row, data){ + // //row - JQuery object for row + // //data - the data for the row + // console.log(data); + // if (reportperiod.tbl.getSelectedData()){ + // //row.css({"background-color":"#A6A6DF"}); + + // } else { + // //row.removeClass("selected"); + // } + // // if ((data) && (data.selected)){ + // // row.css({"background-color":"#A6A6DF"}); + // // + // // }else{ + // // + // // } + // }, + groupBy:["staffname"], + groupStartOpen:[true], + groupClosedShowCalcs:true, + groupHeader:[ + function(value, count, data){ //generate header contents for gender groups + return value; + }, + // function(value, count, data){ //generate header contents for gender groups + // return value; + // }, + ], + columns: [ + {title: "Periodes de références", + columns: [ + //{title: "Nom",field:"staffname",headerFilter: "input",sorter:"string",width:0,visible: false}, + { title: "Début",field: "startdate",sorter:"datetime",formatter:"datetime",formatterParams:{inputFormat:"YYYY-MM-DD",outputFormat:"DD.MM.YYYY",invalidPlaceholder:""},headerFilter: "input" }, + { title: "Fin",field: "enddate",sorter:"datetime",formatter:"datetime",formatterParams:{inputFormat:"YYYY-MM-DD",outputFormat:"DD.MM.YYYY",invalidPlaceholder:""},headerFilter: "input" }, + {title: "Département",field:"groupname",headerFilter: "input",sorter:"string"}, + //{title: "Nom" ,field:"surname",headerFilter: "input",sorter:"string"}, + //{title: "Prénom" ,field:"prename",headerFilter: "input",sorter:"string"}, + {title: "Contrat", field:"contracthours",sorter: false}, + {title: "Travail", field:"workhours",sorter: false}, + {title: "Récup", field:"recuperationhours",sorter: false}, + {title: "congé", field:"vacancyhours",sorter: false}, + {title: "Total", field:"totalhours",sorter: false}, + {title: "Rest", field:"hoursdiff",sorter: false,bottomCalc:reportperiod.periodrestsum} // ,bottomCalcFormatter:"html" + ] + } + ] + }); + // + //reportperiod.initform(); + reportperiod.gettbldata(); + }, + gettbldata: function(){ + req.reqdata("POST", "db.cgi", { "get": "staffreportperiodlist","schemata":schemata}, reportperiod.loadtbldata); + }, + loadtbldata: function(data){ + if (data && data.sqldata) { reportperiod.tbl.setData(data.sqldata);} + }, + add: function(){ + //console.log("TEST Add Period!"); + showactiondlg(schemata,"add_reportperiod","Ajouter","Ajouter prochaine periode?",null,''); + //cleanform(reportperiod.name); + //module.viewdialog(reportperiod.name,null); + return false; + }, + // edit: function(){ + // // var udata = reportperiod.tbl.getSelectedData(); + // // if (udata[0]) { + // // var uid = udata[0].id; + // // req.reqdata("POST","db.cgi",{ "get": reportperiod.name + "data","schemata":schemata,"filter":"id=" + uid},reportperiod.fillform); + // // } + // // //console.log("TEST Add Period!"); + // // //cleanform(reportperiod.name); + // // module.viewdialog(reportperiod.name,null); + // // return false; + // }, + // fillform: function(data){ + // // if (data && data.sqldata){ + // // //console.log("Fill Form 2"); + // // fillformbydataclass2(reportperiod.name,reportperiod.choices,data.sqldata[0]); + // // reportperiod.setenddate(null); + // // } + // }, + // remove: function(){ + // var udata = reportperiod.tbl.getSelectedData(); + // if (udata[0]) { + // showdeletedlg(reportperiod.name,udata[0].id,null,reportperiod.afterperiodsave,schemata); + // } + // }, + // loadplan: function(){ + // var udata = reportperiod.tbl.getSelectedData(); + // if (udata[0]) { + + // var uid = udata[0].id; + // staffworkplan.datefrom = udata[0].startdate; + // staffworkplan.dateto = udata[0].enddate; + // staffworkplan.id_staffgroup= udata[0].id_staffgroup; + // console.log("StaffPeriod:" + " ID: "+ udata[0].id_staffgroup +" " + staffworkplan.datefrom + "->" +staffworkplan.dateto); + // staffworkplan.getstaff(); + // document.getElementById("reportperiodtitle").innerHTML=" Periode du " + moment(udata[0].startdate).lang("fr").format('DD.MM.YYYY') + " au " + moment(udata[0].enddate).lang("fr").format('DD.MM.YYYY') + " - Département " + udata[0].groupname + ""; + // staffworkplan.gettbldata(); + // module.viewpanel('tbl_' + staffworkplan.name); + + // } + // }, + // afterperiodsave: function(){ + // reportperiod.gettbldata(); + // document.getElementById('dlg_reportperiod').style.display='none'; + // return false; + // }, + // setenddate(event){ + // console.log("set EndDate"); + // var startdate = document.getElementById("startdate").value; + // var len = document.getElementById("periodlength").value; + // var type = document.getElementById("periodtype").value; + // console.log(startdate + " + " + len + " " + type ); + // if (len > 0 && type && startdate){ + // var xstartdate = moment(startdate); + // var nenddate = null; + // if (type == 'month'){ + // nenddate = xstartdate.add(len,'months').subtract(1,'day'); + // } else { + // nenddate = xstartdate.add(len,'weeks').subtract(1,'day'); + // } + // document.getElementById("enddate").value=moment(nenddate).format('YYYY-MM-DD'); + // document.getElementById("dspenddate").value=moment(nenddate).format('DD.MM.YYYY'); + // } else { + // document.getElementById("enddate").value=''; + // document.getElementById("dspenddate").value=''; + // } + // }, + // save: function(){ + // // var dateend = document.getElementById("enddate").value; + // // if (dateend == ''){ + // // return false; + // // } + + // var flds = getformcontent('reportperiod'); + // delete flds["null"]; + // delete flds["display_dspenddate"]; + // var bshowmsg = false; + // for (var f in flds){ + // console.log(f + ":" + flds[f]); + // if (flds[f] == "" && f != "ident_reportperiod_id" && f != "reportperiod_isvalidated" && f != "reportperiod_id_validateuser"){ + // console.log("break:" + f ); + // bshowmsg = true; + // } + // } + // console.log(flds); + // if (bshowmsg){ + // document.getElementById("reportperiod_infomsg").innerHTML = '
Tous les champs sont requis!
'; + // return false; + // } + + // saveformdata(flds,reportperiod.afterperiodsave,schemata); + // }, + // viewstaffplan: function(){ + // var udata = reportperiod.tbl.getSelectedData(); + // if (udata[0]){ + // staffworkplan.datefrom = udata[0].startdate; + // staffworkplan.dateto = udata[0].enddate; + // staffworkplan.gettbldata(); + // module.viewpanel('tbl_staffworkplan'); + // } + // }, + // getstaffgroups: function(){ + // req.reqdata("POST","db.cgi",{"get":"staffgroupslist","schemata":schemata},reportperiod.fillstaffgroups); + // }, + // fillstaffgroups: function(data){ + // fillselectlist(reportperiod.choices["id_staffgroup"],data.sqldata,'id','groupname'); + + // }, + generatereport: function(){ + var udata = reportperiod.tbl.getSelectedData(); + if (udata[0]) { + dlgreport.show('pot',udata[0],udata[0].periodname); + } + }, + datarefresh: function(){ + showdataloaddlg('','
Attendez s.v.p.!
'); + req.reqdata("POST","db.cgi",{"action":"refreshperiods","schemata":schemata,"params":""},reportperiod.datarefreshdone); + return false; + }, + datarefreshdone: function(){ + closedataloaddlg(); + return false; + }, + periodrestsum: function(values, data, calcParams){ + return '00:00'; + }, + togglegroups: function(){ + + } + +} \ No newline at end of file diff --git a/backoffice/tmpl/module/periods/staffreportperiod.js b/backoffice/tmp/staffreportperiod.js similarity index 100% rename from backoffice/tmpl/module/periods/staffreportperiod.js rename to backoffice/tmp/staffreportperiod.js diff --git a/backoffice/tmpl/module/periods/staffworkplan.js b/backoffice/tmp/staffworkplan.js similarity index 100% rename from backoffice/tmpl/module/periods/staffworkplan.js rename to backoffice/tmp/staffworkplan.js diff --git a/backoffice/tmpl/module/periods/staffworkplan_daily.js b/backoffice/tmp/staffworkplan_daily.js similarity index 100% rename from backoffice/tmpl/module/periods/staffworkplan_daily.js rename to backoffice/tmp/staffworkplan_daily.js diff --git a/backoffice/tmpl/block/dlgaction.tt b/backoffice/tmpl/block/dlgaction.tt index 3c5cee2e..72dd9dba 100644 --- a/backoffice/tmpl/block/dlgaction.tt +++ b/backoffice/tmpl/block/dlgaction.tt @@ -53,12 +53,12 @@ function action_confirmed(){ return false; } -function afteraction(){ +function afteraction(data){ if (afteractioncallback != null){ //console.log("lauch after callback"); //console.log(afterdeletecallback); - afteractioncallback(null); + afteractioncallback(data); } document.getElementById('dlgaction').style.display='none'; var sb = document.getElementById("snackbar"); diff --git a/backoffice/tmpl/block/dlgreport.tt b/backoffice/tmpl/block/dlgreport.tt index 74678072..8399ee32 100644 --- a/backoffice/tmpl/block/dlgreport.tt +++ b/backoffice/tmpl/block/dlgreport.tt @@ -28,7 +28,7 @@ var dlgreport = { document.getElementById('dlgreport').style.display='none'; showdataloaddlg("Création PDF encours","Attendez s.v.p."); - req.reqdata("POST","report.cgi",{"generate":dlgreport.list+ '/' + repname,"file": dlgreport.prefix + +".pdf","data":dlgreport.data},dlgreport.openreport); + req.reqdata("POST","report.cgi",{"generate":dlgreport.list+ '/' + repname,"file": dlgreport.prefix + "_" + repname +".pdf","data":dlgreport.data},dlgreport.openreport); return false; }, show: function(replist,repdata,prefix){ diff --git a/backoffice/tmpl/macro/fields.tt b/backoffice/tmpl/macro/fields.tt index 8fe4a67d..25304222 100644 --- a/backoffice/tmpl/macro/fields.tt +++ b/backoffice/tmpl/macro/fields.tt @@ -130,7 +130,7 @@ [% END -%] [% MACRO fieldintervalbox(column,table,title,size,state,value,class) BLOCK -%] -
+
[% IF state == "disabled" || state == "readonly" %] diff --git a/backoffice/tmpl/module/companies/index.js b/backoffice/tmpl/module/companies/index.js index 2c607518..00c0e333 100644 --- a/backoffice/tmpl/module/companies/index.js +++ b/backoffice/tmpl/module/companies/index.js @@ -2,7 +2,7 @@ var schemata = "public"; var currentview = null; function initpage(){ //schemata = parent.admin.getcurrentSchemata(); - console.log("Current Schema:" + schemata); + //console.log("Current Schema:" + schemata); companies.inittable(); staffgroups.inittable(); module.viewpanel("tbl_companies"); diff --git a/backoffice/tmpl/module/companies/index.tt b/backoffice/tmpl/module/companies/index.tt index 4afee1fa..eb09b479 100644 --- a/backoffice/tmpl/module/companies/index.tt +++ b/backoffice/tmpl/module/companies/index.tt @@ -18,53 +18,66 @@